相对于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还能够从他的内容中自动的检测到超链接,地址,电话,日历项等元素,并且以相应的系统内置动作来处理。

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

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

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

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

  //为系统的动作选单中增加一项候选项
UIMenuItem *menuItem = [[UIMenuItem alloc]initWithTitle:@"I Love You" action:@selector(actLoveU:)];
UIMenuController *menu = [UIMenuController sharedMenuController];
[menu setMenuItems:[NSArray arrayWithObjects:menuItem, nil]]; //随后重写UIResponder类的方法
-(BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
//显示“I Love You”
if(action == @selector(actLoveU:))
{
//如果UITextView控件意有所指
if(self.textView.selectedRange.length>)
{
return YES;
}
}
//不破坏原有机制
return [super canPerformAction:action withSender:sender];
} //最后完成actLoveU:的响应函数
-(IBAction)actLoveU:(id)sender
{
//任意响应内容
NSLog(@"I Love You");
}

显示效果如图所示:

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属性将会很方便地实现这项方案,具体代码如下:

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

运行效果如下:

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

  1. IOS 学习笔记(6) 控件 文本域(UITextField)的使用方法

    UITextField控件的诸多特性都和UITextView相似,比如成为输入文本焦点时键盘自动显示,支持长按弹出动作选项,能够接收输入事件(开始输入,修改内容,结束输入和点击回车等). 1.特有的特 ...

  2. iOS学习笔记——基础控件(上)

    本篇简单罗列一下一些常用的UI控件以及它们特有的属性,事件等等.由于是笔记,相比起来不会太详细 UIView 所有UI控件都继承于这个UIView,它所拥有的属性必是所有控件都拥有,这些属性都是控件最 ...

  3. IOS 学习笔记(4) 控件 标签(UILabel)的使用方法

    虽说Label的中文翻译是标签标记,但它其实是一个静态文本内容的展现控件. 一般来说,UILabel只是一个只读的文本视图,开发者可以利用UiLabel来展示内容长度有固定上限的文字内容.并且,UIL ...

  4. ios 学习笔记之控件属性

    1.文本框 设置密码属性:Secure Text Entry 勾选; 设置文本框带清除属性: Clear Button =Is always visible;  默认是不带清除属性:Never app ...

  5. IOS 学习笔记(7) 控件 分隔栏控件(UISegmentControl)的使用方法

    分隔栏控件的系统默认式样一共有3种,分别是“普通式样”,"边框式样","条状式样" 分隔栏控件中有一个momentary属性,默认时NO.当开发者配置成YES时 ...

  6. ios 学习笔记(8) 控件 按钮(UIButton)的使用方法

    在实际开发中,对于开发者来说,更多的还是使用“自定义”按钮.将“按钮”对象的类型设置成UIButtonTypeCustom.这样一来,按钮的所有元素都将由开发者来配置和自定义. 对于一个自定义按钮来说 ...

  7. iOS学习之UIPickerView控件的关联选择

    接上篇iOS学习之UIPickerView控件的简单使用 接着上篇的代码 http://download.csdn.net/detail/totogo2010/4391870 ,我们要实现的效果如下: ...

  8. IOS开发学习笔记018- 一般控件的使用

    1.移动 2.动画 3.缩放 3.旋转 4.简化代码 5.总结 UIButton 的两种状态 normal highlighted  1.移动 OC语法规定:不允许直接修改某个对象中结构体属性的成员. ...

  9. iOS学习笔记——触控与手势

    触控 此部分内容已学良久,恨记之甚晚,忙矣,懒矣!本文简而记焉,恐日后忘也. 在iOS的触控事件中,有触控.事件以及响应者这三个角色,一个触摸则代表了一只手指和屏幕接触这个动作所包含的信息:而事件则包 ...

随机推荐

  1. <学习>.NET的反射基础

    关键词 Assembly 使用Assembly定义和加载程序集,加载在程序集清单中列出模块,以及从此程序集中查找类型并创建该类型的实例. Module 通过它可以获取包含模块的程序集以及模块中的类等, ...

  2. javascript模块化开发编程

    随着网站的不断迭代更新,js代码越来越多,那么问题来了 代码比较乱 命名出现冲突 文件依赖比较繁杂 为了解决以上问题,模块化开发出现了 1.一个简单的demo,维护和扩展模块 模块的维护和扩展一定要遵 ...

  3. Unity5UGUI 官方教程学习笔记(一)Canvas

    Canvas Canvas是控制一组UI元素将被渲染 所有的UI元素必须是Canvas下的子物体 一个场景中可以拥有多个Canvas 在创建UI元素时,如果没有Canvas,将会自动创建Canvas ...

  4. Spring——AOP(面向切面编程)@AspectJ注解方式

    一.什么是AOP? AOP: (Aspect Oriented Programming)即面向切面编程. 试想这样的场景:项目中需要在业务方法执行完打印日志记录.最笨的办法就是在每个方法核心业务执行完 ...

  5. Android 汉字转拼音之JNI篇

    package com.tool.hz2py; import android.os.Bundle; import android.app.Activity; import android.view.M ...

  6. Tomcat与Web服务器、应用服务器的关系

    Tomcat服务器是一个免费的开放源代码的Web应用服务器.因为Tomcat技术先进.性能稳定且免费,所以深受Java爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web应用服务器. A ...

  7. Canvas 雾玻璃

    Demo http://lumixraku.github.io/demos/Fog/Fog.html Canvas tutorial 给大家安利一个学习Canvas的站点 http://www.htm ...

  8. OP(Over-provisioning)预留空间

    SSD上的OP指的是用户不可操作的容量,大小为实际容量减去用户可用容量,OP区域一般被用于优化操作如:WL,GC和坏块映射等.       OP一般分三层(见下图).第一层容量固定为SSD标称容量的7 ...

  9. Html 小插件6 百度新闻插件

    新闻免费代码"http://news.baidu.com/newscode.html ,便可在输入希望订阅的关键词后,根据相关选项的设置,百度便非常快的在当前页面的文本编辑框内生成相关代码. ...

  10. POJ 3294 Life Forms(后缀数组+二分答案)

    [题目链接] http://poj.org/problem?id=3294 [题目大意] 求出在至少在一半字符串中出现的最长子串. 如果有多个符合的答案,请按照字典序输出. [题解] 将所有的字符串通 ...