IOS 学习笔记(5) 控件 文本视图(UITextView)的使用方法

相对于UILabell所支持的较短文本内容,UITextView对于长文本的支持更好。UITextView能够以滚动的方式全部浏览到长文本,并且就像UILabel那样,从ISO6,他也提供了对NSAttributeString的支持.

1.不可编辑的文本视图控件

在类文件中声明一个UITextView的IBOutlet对象

@property (nonatomic, retain) IBOutlet UITextView *textView;

textView的代码配置示例如下:

  //背景颜色
    self.textView.backgroundColor = [UIColor lightGrayColor];
    //文字颜色
    self.textView.textColor = [UIColor blackColor];
    //文字字体
    self.textView.font = [UIFont systemFontOfSize:14.0f];
    //排版
    self.textView.textAlignment = NSTextAlignmentLeft;
    //是否支持滚动
    self.textView.scrollEnabled = YES;
    //确保静态文本不可编辑
    self.textView.editable = NO;

另外,如果想要控件拥有圆角和边线,可以使用UIView的CALayer对象进行配置,再引入QuartzCore的系统框架后,实现代码如下:

    #import <QuartzCore/QuartzCore.h>
    ...
   //边框
    self.textView.layer.borderColor = [UIColor blackColor].CGColor;
    self.textView.layer.borderWidth = 2.0;
    //圆角
    self.textView.layer.cornerRadius = 5.0;

简单的配置代码不仅将UITextView显示可以上下拖动浏览(文本内容的“\n”起到了换行的作用)还显示优雅的边框。

UITextView还能够从他的内容中自动的检测到超链接,地址,电话,日历项等元素,并且以相应的系统内置动作来处理。

1 //自动检测的内容类型
2     self.textView.dataDetectorTypes = UIDataDetectorTypeAll;
3     self.textView.dataDetectorTypes = UIDataDetectorTypePhoneNumber | UIDataDetectorTypeLink | UIDataDetectorTypeAddress | UIDataDetectorTypeCalendarEvent;

2.自定义选中文本后的弹出选项

相对于普通文本内容长按是,系统会弹出一个放大镜来放大当前选中的文字。如果此时松手又会发现一个系统的贴心服务,他会在选中的地方之上弹出一个备选的动作选单列表,让用户的选择文字操作变得有意义起来。

其中“copy”会将所选中文字复制到系统粘贴板上,"Paste"则会将粘贴板上的内容粘贴在所选区域。我们还可以自定义弹出选项。代码如下:

 1  //为系统的动作选单中增加一项候选项
 2     UIMenuItem *menuItem = [[UIMenuItem alloc]initWithTitle:@"I Love You" action:@selector(actLoveU:)];
 3     UIMenuController *menu = [UIMenuController sharedMenuController];
 4     [menu setMenuItems:[NSArray arrayWithObjects:menuItem, nil]];
 5 
 6 //随后重写UIResponder类的方法
 7 -(BOOL)canPerformAction:(SEL)action withSender:(id)sender
 8 {
 9     //显示“I Love You”
10     if(action == @selector(actLoveU:))
11     {
12         //如果UITextView控件意有所指
13         if(self.textView.selectedRange.length>0)
14         {
15             return YES;
16         }
17     }
18     //不破坏原有机制
19     return [super canPerformAction:action withSender:sender];
20 }
21 
22 //最后完成actLoveU:的响应函数
23 -(IBAction)actLoveU:(id)sender
24 {
25     //任意响应内容
26     NSLog(@"I Love You");
27 }

显示效果如图所示:

3.可编辑的文本视图

   当开发者将UITextView设置成可编辑的状态时,每当用户点击到UITextView中任何内容,系统默认会弹出一个键盘供文本输入。并且由于UITextView遵守了UITextInputTraits的协议,对于输入内容来说,诸如是否首字母大写,是否开启自动校正,是否开启拼写检查,以及弹出键盘的式样等都可以从UITextView对象中进行配置,再输入的过程中,或许我们相对输入的内容做些某些特殊指定。代码如下:

//确保静态文本可编辑
    self.textView.editable = YES;
    
    //所有输入文本的句子首字母大写
    self.textView.autocapitalizationType = UITextAutocapitalizationTypeSentences;
    //自动校正开始
    self.textView.autocorrectionType = UITextAutocorrectionTypeYes;
    //拼写检查开始
    self.textView.spellCheckingType = UITextSpellCheckingTypeYes;
    //没有输入内容时,键盘返回键置灰
    self.textView.enablesReturnKeyAutomatically = YES;
    //键盘外观
    self.textView.keyboardAppearance = UIKeyboardAppearanceAlert;
    //键盘种类
    self.textView.keyboardType = UIKeyboardTypeEmailAddress;
    //键盘返回键的种类
    self.textView.returnKeyType = UIReturnKeyDone;
    //输入内容是否加密
    self.textView.secureTextEntry = NO;

4.收起键盘

系统所弹出键盘虽然会自动显示,但是他是否隐藏却常常需要开发者自己控制,一般有两种方式可以让键盘隐藏起来,首先就是对于当前的UITextView对象通过执行resignFirstResponder方法来退出对象自己作为屏幕的第一焦点。再则,对于UITextView所在的视图对象UIView进行“endEdit:Yes”的调用也可以让视图上所有的控件都退出第一焦点。是的,就像你所想的那样,系统的键盘之所以显示出来,正是因为系统检测到用户将焦点移到了UITextView上欲进行文本输入。 

   如果成了UITextView的代理对象,将会收到一系列包括开始编辑,结束编辑,修改内容等代理方法被动调用,这些代理回调方法如下:

   (1)是否允许编辑

-(BOOL)textViewShouldBeginEditing:(UITextView *)textView

   (2)开始编辑

-(void)textViewDidBeginEditing:(UITextView *)textView

   (3)新的内容被输入,并且有可能会替代当前的某些内容

-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text

  (4)文本内容已经被修改

-(void)textViewDidChange:(UITextView *)textView

 (5)文本的选中内容发生变化

-(void)textViewDidChangeSelection:(UITextView *)textView

 (6)是否允许结束编辑

-(BOOL)textViewShouldEndEditing:(UITextView *)textView

 (7)结束编辑状态

-(void)textViewDidEndEditing:(UITextView *)textView

既然“返回键”不能作为键盘的触发键,那对于UITextView的键盘收起问题,我们以诸多用户体验优秀的前辈程序作为参考得出如下三种方案:

  (1)在界面上方增加一条导航栏并且在导航栏右侧提供一个”完成“按钮,当“textViewDidBeginEditing”代理方法回调时,将此按钮显示出来,相反的,当"textViewDidEndEditing"代理方法回调时,按钮需要隐藏

  (2)在整个屏幕的背景上增加一个捕获"点击事件"的视图,当捕获到事件时无条件地收起键盘。

  (3)在键盘上端增加一条工具栏,其中提供一个“完成”按钮以收起键盘.

比较这3种方案,最后一种是用户体验最好的一项。使用UITextView的inputAccessoryView属性将会很方便地实现这项方案,具体代码如下:

 1  //工具栏
 2     UIToolbar *accessBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0.0f, 0.0f, CGRectGetWidth(self.view.frame), 44.0f)];
 3     [accessBar setBarStyle:UIBarStyleBlackOpaque];
 4     
 5     //从左至右,工具栏第一个控件是"可拉伸的空间",会将之后的控件顶向右侧
 6     UIBarButtonItem *space = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
 7     //第二个控件“Done”,由于”有可拉伸的空间“在左侧存在,所以“Done”被顶到最右侧
 8     UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(actFinishInput:)];
 9     [accessBar setItems:[NSArray arrayWithObjects:space,doneButton, nil]];
10     
11     //键盘上端的辅助视图设置
12     self.textView.inputAccessoryView = accessBar;
13 
14 
15 -(IBAction)actFinishInput:(id)sender
16 {
17     //收起键盘
18     [self.view endEditing:YES];
19 }

运行效果如下:

 

转载于:https://www.cnblogs.com/haibosoft/p/3664737.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值