iOS开发UITextView属性,点击新增内容案例,及UITextViewDelegate里光标/值变化的操作方法

转载自:http://blog.csdn.net/weisubao/article/details/39612915

(1)UITextView和UITextField的区别可以(简单)理解为,前者是一块区域可以写很多东西有换行滚动条神马的,后者只有一行文本,类似于html里面的textarea和text。

(2)在本例中,我们利用一个UITextField和一个UIButton不断把UITextField里面的内容加到UITextView的最后一行。这里面用到给按钮增加 一个事件,并在事件里面把UITextField.text加到UITextView.text的后面。


(3)在本例中为了用户体验,可以设置每次增减内容后,光标或者文本框是现实最后一行的,这里面用了scrollRangeToVisible方法,这个方法需要一个Range参数,我们可以获得UITextView的selectedRange后当做参数传递过去。这个Range系列都是一个struct结构,包括位置和长度两个参数的结构,有点类似于CGPoint和CGSize的感觉。


(4)还利用在AppDelegate.h中增加UITextViewDelegate协议,了解其中的方法,有几个是否允许编辑、结束编辑、编辑和结束编辑后如何操作等等。


(5)还有几个协议方法比较重要,因为涉及到是否可以改变内容,内容改变后或者触发seletedRange里面的位置或者长度(也就是光标位置改变和增减内容)发生变化时如何操作。这个……呃……很实用吧。当然还可以输出变化的内容等等。


[objc]  view plain copy
  1. #import "ViewController.h"  
  2.   
  3. @interface ViewController ()  
  4.   
  5. @end  
  6.   
  7. @implementation ViewController  
  8. {  
  9.     UITextView *textView1;  
  10.     UITextField *textField1;  
  11. }  
  12.   
  13. - (void)viewDidLoad {  
  14.     //初始化  
  15.     textView1=[[UITextView alloc]init];  
  16.     //设置大小位置  
  17.     textView1.frame=CGRectMake(1030300100);  
  18.     //设置背景颜色  
  19.     textView1.backgroundColor=[UIColor orangeColor];  
  20.     //设置文字内容  
  21.     textView1.text=@"what should i say to u,my lovely world,hello,anybody home.我是小坏蛋,你们有谁知道吗?我不知道该输入什么了啊!还要继续输入吗?真得吗?hello,aggin,here am i.what are you doing,man?where are u going man?";  
  22.     //设置字体大小,加粗和斜体等  
  23.     textView1.font=[UIFont boldSystemFontOfSize:20];  
  24.     //经过以上设置,文字超过框,我们可以上下滚动来查看,而且我们也能继续输入添加删除等等,还可以copy和cut(双击文字)  
  25.     //还可以换行输入等等,这是和textField的区别之一  
  26.     //如果是否可编辑设置为NO,则不可添加删除和cut,只能copy  
  27.     //这个时候键盘也不出来了,只能双击文字copy  
  28.     textView1.editable=YES;  
  29.       
  30.     //在AppDelegate中加入UITextViewDelegate后  
  31.     textView1.delegate=self;  
  32.       
  33.     [self.view addSubview:textView1];  
  34.       
  35.     //我们增加一个UITextField和UIButton,在UITextField中输入内容,然后按钮添加,就把内容添加到UITextView中  
  36.     textField1=[[UITextField alloc]init];  
  37.     textField1.frame=CGRectMake(1015030030);  
  38.     textField1.borderStyle=UITextBorderStyleRoundedRect;  
  39.     [self.view addSubview:textField1];  
  40.     UIButton *btn1=[UIButton buttonWithType:UIButtonTypeRoundedRect];  
  41.     btn1.frame=CGRectMake(1020030030);  
  42.     [btn1 setTitle:@"添加" forState:UIControlStateNormal];  
  43.     btn1.backgroundColor=[UIColor orangeColor];  
  44.     [self.view addSubview:btn1];  
  45.   
  46.     //给btn1增加一个事件  
  47.     [btn1 addTarget:self action:@selector(addText1) forControlEvents:UIControlEventTouchUpInside];  
  48.   
  49.     [super viewDidLoad];  
  50.     // Do any additional setup after loading the view, typically from a nib.  
  51. }  
  52.   
  53. -(void)addText1{  
  54.     //注意用的函数是stringByAppendingFormat  
  55.     textView1.text=[textView1.text stringByAppendingFormat:@"\n%@",textField1.text];  
  56.     //添加后光标定位在最尾部  
  57.     //slectedRange是一个结构,表示位置和长度,后面的NSMakeRange同样  
  58.     //NSUInteger 表示无符号的整型,但用下面两行设置无效,因为selectedRange是一个属性,可以获得值也可以赋值但不是方法不可以操作滚动动作  
  59.     //NSUInteger len1=textView1.text.length-1;  
  60.     //textView1.selectedRange=NSMakeRange(len1, 0);  
  61.     //需要用一下滚动操作的方法,并且把selectedRange属性值作为Range值传递进去  
  62.     //不满意的是每次新添加后它都要从Top滚动到尾部,感觉怪怪的  
  63.     [textView1 scrollRangeToVisible:textView1.selectedRange];  
  64. }  
  65.   
  66. //以下四个协议里面的方式和UITextFieldDelegate里地一样,略去不说  
  67. //- (BOOL)textViewShouldBeginEditing:(UITextView *)textView;  
  68. //- (BOOL)textViewShouldEndEditing:(UITextView *)textView;  
  69. //- (void)textViewDidBeginEditing:(UITextView *)textView;  
  70. //- (void)textViewDidEndEditing:(UITextView *)textView;  
  71.   
  72. //一看是BOOL,不是YES就是NO,就是允许修改内容  
  73. - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{  
  74.     return YES;  
  75. }  
  76. //只有在内容改变时才触发,而且这个改变内容是手动输入有效,用本例中得按钮增加内容不触发这个操作  
  77. - (void)textViewDidChange:(UITextView *)textView{  
  78.     NSLog(@"Did Change");  
  79. }  
  80. //几乎所有操作都会触发textViewDidChangeSelection,包括点击文本框、增加内容删除内容  
  81. //可以理解为只要于selectedRange有关都会触发,(位置与长度)  
  82. - (void)textViewDidChangeSelection:(UITextView *)textView{  
  83.     NSLog(@"Did Change Selection");  
  84. }  
  85.   
  86. @end  

截个图:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值