1. 一些属性设置
//初始化并定义大小
UITextView *textview = [[UITextViewalloc] initWithFrame:CGRectMake(20, 10, 280, 30)];
textview.backgroundColor=[UIColor whiteColor]; //背景色
textview.scrollEnabled = NO;
//当文字超过视图的边框时是否允许滑动,默认为“YES”
textview.editable = YES;
//是否允许编辑内容,默认为“YES”
textview.delegate = self;
//设置代理方法的实现类
textview.font=[UIFontfontWithName:@"Arial"size:18.0];
//设置字体名字和字体大小;
textview.returnKeyType = UIReturnKeyDefault;
//return键的类型
textview.keyboardType = UIKeyboardTypeDefault;//键盘类型
textview.textAlignment = NSTextAlignmentLeft; //文本显示的位置默认为居左
textview.dataDetectorTypes = UIDataDetectorTypeAll;
//显示数据类型的连接模式(如电话号码、网址、地址等)
textview.textColor = [UIColorblackColor];//显示文本的颜色
textview.text = @"UITextView详解";//设置显示的文本内容
//将textview添加到view中
[self.viewaddSubview:textview];
//添加滚动区域
_textView.contentInset =UIEdgeInsetsMake(-11, -6, 0, 0);// 这样设置以后会紧贴左边
//获得焦点
[_textViewbecomeFirstResponder]; 设置以后启动直接弹出键盘
//是否显示滚动条
_textView.showsVerticalScrollIndicator = YES;
// 自适应高度
_textView.autoresizingMask = UIViewAutoresizingFlexibleHeight;
//设置其为圆角
[_textView.layer setCornerRadius:10];
2. 代理方法
UITextView的代理方法如下:
//将要开始编辑
- (BOOL)textViewShouldBeginEditing:(UITextView *)textView;
//将要结束编辑
- (BOOL)textViewShouldEndEditing:(UITextView *)textView;
//开始编辑
- (void)textViewDidBeginEditing:(UITextView *)textView;
//结束编辑
- (void)textViewDidEndEditing:(UITextView *)textView;
//内容将要发生改变编辑
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)rangereplacementText:(NSString *)text;
//内容发生改变编辑
- (void)textViewDidChange:(UITextView *)textView;
//焦点发生改变
- (void)textViewDidChangeSelection:(UITextView *)textView;
有时候我们要控件自适应输入的文本的内容的高度,只要在textViewDidChange的代理方法中加入调整控件大小的代理即可
- (void)textViewDidChange:(UITextView *)textView
{
//计算文本的高度
CGSize constraintSize;
constraintSize.width = textView.frame.size.width-16;
constraintSize.height = MAXFLOAT;
CGSize sizeFrame =[textView.textsizeWithFont:textView.font
constrainedToSize:constraintSize
lineBreakMode:UILineBreakModeWordWrap];
//重新调整textView的高度
textView.frame = CGRectMake(textView.frame.origin.x,textView.frame.origin.y,textView.frame.size.width,sizeFrame.height+5);
}
控制输入文字的长度和内容,可通过调用以下代理方法实现
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
if (range.location>=100)
{
//控制输入文本的长度
return NO;
}
if ([text isEqualToString:@"\n"])
{
//禁止输入换行
returnNO;
}
else
{
returnYES;
}
}
3.退出键盘
方法1:如果你程序是有导航条的,可以在导航条上面加多一个Done的按钮,用来退出键盘,当然要先实UITextViewDelegate。
使用代理方法
- (void)textViewDidBeginEditing:(UITextView *)textView
{
//键盘弹出开始进行编辑的时候才出现这个按钮
UIBarButtonItem *done = [[[UIBarButtonItemalloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:selfaction:@selector(leaveEditMode)] autorelease];
_rootView.navigationItem.rightBarButtonItem= done;
}
- (void)leaveEditMode
{
//退出键盘,第一响应者辞职
[_textView resignFirstResponder];
}
- (void)textViewDidEndEditing:(UITextView *)textView
{
//结束编辑时清空这个按钮
_rootView.navigationItem.rightBarButtonItem= nil;
//这里不能直接写_navigationItem,这样写的话相当于是说self的属性,即viewconotroller的,但这个done按钮不是要加到那上边的,而是加到rootView上的
}
方法2:如果你的textview里不用回车键,可以把回车键当做退出键盘的响应键
-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)rangereplacementText:(NSString *)text
{
if ([text isEqualToString:@"\n"])
{
[_textView resignFirstResponder];
return NO;
}
else
{
return YES;
}
}
方法3:
//在弹出的键盘上加一个view来放置两个按键,其中一个done按钮就用于键盘退出
//创建一个UIToolbar
UIToolbar *topView = [[[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 30)] autorelease];
//设置UIToolbar样式
[topView setBarStyle:UIBarStyleBlack];
//创建并初始化UIToolbar上面的按钮
UIBarButtonItem *helloButton = [[[UIBarButtonItem alloc] initWithTitle:@"Hello" style:UIBarButtonItemStylePlain target:self action:nil] autorelease];
UIBarButtonItem *btnSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
UIBarButtonItem *doneButton = [[[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(dismissKeyBoard)] autorelease];
//组成按钮数组
NSArray *buttonsArray = [NSArray arrayWithObjects:helloButton,btnSpace,doneButton,nil];
//设置数组到UIToolbar中
[topView setItems:buttonsArray];
//加到键盘上
//在使用UITextView和UITextField的时候,可以通过它们的inputAccessoryView属性给输入时呼出的键盘加一个附属视图,通常是UIToolBar,用于回收键盘。
[_textView setInputAccessoryView:topView];
- (void)dismissKeyBoard
{
[_textView resignFirstResponder];
}
4.
// 自定义选择文字后的菜单
UIMenuItem *menuItem = [[[UIMenuItem alloc] initWithTitle:@"分享到新浪微博" action:@selector(changeColor)] autorelease];
UIMenuController *menu = [UIMenuController sharedMenuController];
[menu setMenuItems:[NSArray arrayWithObject:menuItem]];