iOS中的UITextView文字输入光标使用技巧小结
1.创建并初始化
@property(nonatomic,strong)UITextView*textView; //创建 self.textView=[[UITextViewalloc]initWithFrame:self.view.frame]; //设置textview里面的字体颜色 self.textView.textColor=[UIColorblackColor]; //设置字体名字和字体大小 self.textView.font=[UIFontfontWithName:@"Arial"size:18.0]; //设置代理 self.textView.delegate=self; //设置它的背景颜色 self.textView.backgroundColor=[UIColorwhiteColor]; self.textView.text=@“hehe”; //返回键的类型 self.textView.returnKeyType=UIReturnKeyDefault; //键盘类型 self.textView.keyboardType=UIKeyboardTypeDefault; //是否可以拖动 self.textView.scrollEnabled=YES;
2.UITextView退出键盘的几种方式
(1)如果你程序是有导航条的,可以在导航条上面加多一个Done的按钮,用来退出键盘,当然要先实现UITextViewDelegate。
-(void)textViewDidBeginEditing:(UITextView*)textView{
self.navigationItem.rightBarButtonItem=[[UIBarButtonItemalloc]initWithBarButtonSystemItem:UIBarButtonSystemItemDonetarget:selfaction:@selector(getOverEditing)];
}
-(void)textViewDidEndEditing:(UITextView*)textView{
self.navigationItem.rightBarButtonItem=nil;
}
-(void)getOverEditing{
[self.textViewresignFirstResponder];
}
(2)如果你的textview里不用回车键,可以把回车键当做退出键盘的响应键。
#pragmamark-UITextViewDelegateMethods
-(BOOL)textView:(UITextView*)textViewshouldChangeTextInRange:(NSRange)rangereplacementText:(NSString*)text
{
if([textisEqualToString:@"\n"]){
[textViewresignFirstResponder];
returnNO;
}
returnYES;
}
(3)还有你也可以自定义其他视图控件加载到键盘上用来退出,比如在弹出的键盘上面加一个view来放置退出键盘的Done按钮。
UIToolbar*topView=[[UIToolbaralloc]initWithFrame:CGRectMake(0,0,320,30)];
UIBarButtonItem*cancelButton=[[UIBarButtonItemalloc]initWithTitle:@"Done"style:UIBarButtonItemStyleDonetarget:selfaction:@selector(dismissKeyBoard)];
NSArray*buttonsArray=@[cancelButton];
[topViewsetItems:buttonsArray];
[self.textViewsetInputAccessoryView:topView];
-(void)dismissKeyBoard
{
[tvTextViewresignFirstResponder];
}
3.UITextView自定选择文字后的菜单
在ViewDidLoad中加入:
-(void)viewDidLoad
{
[superviewDidLoad];
self._textView=[[UITextViewalloc]initWithFrame:CGRectMake(10,100,300,200)];
[self.viewaddSubview:_textView];
UIMenuItem*menuItem=[[UIMenuItemalloc]initWithTitle:@“我是自定义的菜单"action:@selector(didClickCustomMenuAction)];
UIMenuController*menu=[UIMenuControllersharedMenuController];
[menusetMenuItems:[NSArrayarrayWithObject:menuItem]];
[menuItemrelease];
}
当然上面那个@selector里面的changeColor方法还是自己写吧,也就是说点击了我们自定义的菜单项后会触发的方法。
然后还得在代码里加上一个方法:
-(BOOL)canPerformAction:(SEL)actionwithSender:(id)sender
{
if(action==@selector(changeColor)||action==@selector(copy:))
{
if(_textView.selectedRange.length>0)
returnYES;
}
returnNO;
}
-(void)didClickCustomMenuAction
{
NSLog(@"%@“,__function__);
}
4.设置UITextView内边距
当我们因为一些需求将UITextView当成UILabel使用(为了使用UITextView自带的复制,粘贴,选择功能),这时我们只需要禁用UITextView的几个属性就行了
textView.editable=NO;//不可编辑 textView.scrollEnabled=NO;//不可滚动 textView.editable=NO;//不可编辑 textView.scrollEnabled=NO;//不可滚动
这样就ok;
但是当我们在实际运用时,想计算文字的大小并设置UITextView的显示大小
UIFont*font=[UIFontsystemFontOfSize:14.0f];//指定字符串的大小 [textViewsetText:content]; CGSizetextSize=[contentsizeWithFont:fontconstrainedToSize:CGSizeMake(200,2000)lineBreakMode:UILineBreakModeCharacterWrap]; CGRectarticleframe=[articleLabelframe]; textView.size.height=textSize.height; textView.size.width=textSize.width; [textViewsetFrame:articleframe]; UIFont*font=[UIFontsystemFontOfSize:14.0f];//指定字符串的大小 [textViewsetText:content]; CGSizetextSize=[contentsizeWithFont:fontconstrainedToSize:CGSizeMake(200,2000)lineBreakMode:UILineBreakModeCharacterWrap]; CGRectarticleframe=[articleLabelframe]; textView.size.height=textSize.height; textView.size.width=textSize.width; [textViewsetFrame:articleframe];
但是通过这种方法在UILabel上使用没有任何问题,但是在UITextView是却不行,文字总是显示不全,不管你主动写多了高度给它,当文字不一样了双会显示不全或显示高度过多;
可以用下面的方法试一下
[self.articleLabelsetContentInset:UIEdgeInsetsMake(-10,-5,-15,-5)];//设置UITextView的内边距 [self.articleLabelsetTextAlignment:NSTextAlignmentLeft];//并设置左对齐 [self.articleLabelsetContentInset:UIEdgeInsetsMake(-10,-5,-15,-5)];//设置UITextView的内边距 [self.articleLabelsetTextAlignment:NSTextAlignmentLeft];//并设置左对齐