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];//并设置左对齐