iOS中的UITextView文字输入光标使用技巧小结

所属分类: 软件编程 / IOS 阅读数: 295
收藏 0 赞 0 分享

1.创建并初始化

 @property (nonatomic, strong) UITextView *textView; 

// 创建
self.textView = [[UITextView alloc] initWithFrame:self.view.frame]; 

// 设置textview里面的字体颜色 
 self.textView.textColor = [UIColor blackColor]; 
// 设置字体名字和字体大小 
 self.textView.font = [UIFont fontWithName:@"Arial" size:18.0]; 
// 设置代理
 self.textView.delegate = self;  
// 设置它的背景颜色
 self.textView.backgroundColor = [UIColor whiteColor]; 
 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 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(getOverEditing)];  

}  
- (void)textViewDidEndEditing:(UITextView *)textView {  
  self.navigationItem.rightBarButtonItem = nil; 
} 
- (void)getOverEditing{
 [self.textView resignFirstResponder];  
}

(2)如果你的textview里不用回车键,可以把回车键当做退出键盘的响应键。

#pragma mark - UITextView Delegate Methods   
-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{  
 if ([text isEqualToString:@"\n"]) {  
   [textView resignFirstResponder];  
   return NO;  
  }
 return YES;  
}

(3)还有你也可以自定义其他视图控件加载到键盘上用来退出,比如在弹出的键盘上面加一个view来放置退出键盘的Done按钮。

   UIToolbar * topView = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, 320, 30)]; 
   UIBarButtonItem * cancelButton= [[UIBarButtonItem alloc]initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(dismissKeyBoard)]; 
   NSArray * buttonsArray = @[cancelButton]; 
   [topView setItems:buttonsArray]; 
   [self.textView setInputAccessoryView:topView]; 
 -(void)dismissKeyBoard 
 { 
   [tvTextView resignFirstResponder]; 
 }

3.UITextView自定选择文字后的菜单

在ViewDidLoad中加入:

- (void)viewDidLoad
{
  [super viewDidLoad];
  self._textView = [[UITextView alloc] initWithFrame:CGRectMake(10, 100, 300, 200)];
  [self.view addSubview:_textView];  
  UIMenuItem *menuItem = [[UIMenuItem alloc]initWithTitle:@“我是自定义的菜单" action:@selector(didClickCustomMenuAction)]; 
  UIMenuController *menu = [UIMenuController sharedMenuController]; 
  [menu setMenuItems:[NSArray arrayWithObject:menuItem]]; 
  [menuItem release]; 
}

当然上面那个@selector里面的changeColor方法还是自己写吧,也就是说点击了我们自定义的菜单项后会触发的方法。
然后还得在代码里加上一个方法:

-(BOOL)canPerformAction:(SEL)action withSender:(id)sender 
{ 
  if(action ==@selector(changeColor) || action == @selector(copy:)) 
  { 
    if(_textView.selectedRange.length>0) 
      return YES; 
  } 
  return NO; 
} 
-(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 = [UIFont systemFontOfSize:14.0f]; //指定字符串的大小 
 
[textView setText:content]; 
 
CGSize textSize = [content sizeWithFont:font constrainedToSize:CGSizeMake(200, 2000) lineBreakMode:UILineBreakModeCharacterWrap]; 
 
CGRect articleframe = [articleLabel frame]; 
textView.size.height = textSize.height ; 
 textView.size.width = textSize.width; 
[textView setFrame:articleframe]; 
UIFont *font = [UIFont systemFontOfSize:14.0f]; //指定字符串的大小 
 
[textView setText:content]; 
 
CGSize textSize = [content sizeWithFont:font constrainedToSize:CGSizeMake(200, 2000) lineBreakMode:UILineBreakModeCharacterWrap]; 
 
CGRect articleframe = [articleLabel frame]; 
textView.size.height = textSize.height ; 
 textView.size.width = textSize.width; 
[textView setFrame:articleframe]; 

但是通过这种方法在UILabel上使用没有任何问题,但是在UITextView是却不行,文字总是显示不全,不管你主动写多了高度给它,当文字不一样了双会显示不全或显示高度过多;
可以用下面的方法试一下

[self.articleLabel setContentInset:UIEdgeInsetsMake(-10, -5, -15, -5)];//设置UITextView的内边距 
[self.articleLabel setTextAlignment:NSTextAlignmentLeft];//并设置左对齐 
[self.articleLabel setContentInset:UIEdgeInsetsMake(-10, -5, -15, -5)];//设置UITextView的内边距 
[self.articleLabel setTextAlignment:NSTextAlignmentLeft];//并设置左对齐 

更多精彩内容其他人还在看

iOS逆向教程之跟踪函数调用详解

这篇文章主要给大家介绍了关于iOS逆向教程之跟踪函数调用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
收藏 0 赞 0 分享

iOS App连续闪退时上报crash日志的方法详解

iOS App 有时可能遇到启动必 crash 的绝境:每次打开 App 都闪退,无法正常使用App。下面这篇文章主要给大家介绍了iOS App连续闪退时上报crash日志的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
收藏 0 赞 0 分享

如何为Xcode添加删除整行、复制整行及在下方新建一行快捷键详解

xcode是苹果公司向开发人员提供的集成开发环境,开发者们经常会使用到,下面这篇文章主要给大家介绍了关于如何为Xcode添加删除整行、复制整行及在下方新建一行快捷键的相关资料,需要的朋友可以参考下。
收藏 0 赞 0 分享

iOS指纹登录(TouchID)集成方案详解

这篇文章主要为大家详细介绍了iOS指纹登录TouchID的集成方案,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

iOS动态验证码实现代码

本文通过实例代码给大家介绍了ios动态验证码的实现方法,代码简单易懂,非常不错,具有参考借鉴价值,需要的朋友参考下吧
收藏 0 赞 0 分享

iOS模块化开发浅析

本文给大家分析了IOS在模块发开发时候的相关注意点以及简单代码做了分享,有兴趣的朋友参考学习下。
收藏 0 赞 0 分享

iOS中封装.framework及使用的方法详解

这篇文章主要给大家介绍了关于iOS中封装.framework及使用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧。
收藏 0 赞 0 分享

WKWebView、WebView和JS的交互方式详解

这篇文章主要给大家介绍了关于WKWebView、WebView和JS的交互方式,文中通过示例代码介绍的非常详细,对各位iOS开发者们具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
收藏 0 赞 0 分享

ios wkwebview离线化加载h5资源解决方案

本篇文章主要介绍了ios wkwebview离线化加载h5资源解决方案,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

iOS实现带指引线的饼状图效果(不会重叠)

饼状图对大家来说应该都不陌生,下面这篇文章主要给大家介绍了关于iOS实现带指引线的饼状图效果(不会重叠)的相关资料,文章通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。
收藏 0 赞 0 分享
查看更多