【iOS開發-17】UITextView屬性,點擊新增內容案例,及UITextViewDelegate里光標/值變化的操作方法
來源:程序員人生 發布時間:2014-10-12 16:07:23 閱讀次數:2497次
(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里面的位置或者長度(也就是光標位置改變和增減內容)發生變化時如何操作。這個……呃……很實用吧。當然還可以輸出變化的內容等等。
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
{
UITextView *textView1;
UITextField *textField1;
}
- (void)viewDidLoad {
//初始化
textView1=[[UITextView alloc]init];
//設置大小位置
textView1.frame=CGRectMake(10, 30, 300, 100);
//設置背景顏色
textView1.backgroundColor=[UIColor orangeColor];
//設置文字內容
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?";
//設置字體大小,加粗和斜體等
textView1.font=[UIFont boldSystemFontOfSize:20];
//經過以上設置,文字超過框,我們可以上下滾動來查看,而且我們也能繼續輸入添加刪除等等,還可以copy和cut(雙擊文字)
//還可以換行輸入等等,這是和textField的區別之一
//如果是否可編輯設置為NO,則不可添加刪除和cut,只能copy
//這個時候鍵盤也不出來了,只能雙擊文字copy
textView1.editable=YES;
//在AppDelegate中加入UITextViewDelegate后
textView1.delegate=self;
[self.view addSubview:textView1];
//我們增加一個UITextField和UIButton,在UITextField中輸入內容,然后按鈕添加,就把內容添加到UITextView中
textField1=[[UITextField alloc]init];
textField1.frame=CGRectMake(10, 150, 300, 30);
textField1.borderStyle=UITextBorderStyleRoundedRect;
[self.view addSubview:textField1];
UIButton *btn1=[UIButton buttonWithType:UIButtonTypeRoundedRect];
btn1.frame=CGRectMake(10, 200, 300, 30);
[btn1 setTitle:@"添加" forState:UIControlStateNormal];
btn1.backgroundColor=[UIColor orangeColor];
[self.view addSubview:btn1];
//給btn1增加一個事件
[btn1 addTarget:self action:@selector(addText1) forControlEvents:UIControlEventTouchUpInside];
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
-(void)addText1{
//注意用的函數是stringByAppendingFormat
textView1.text=[textView1.text stringByAppendingFormat:@"
%@",textField1.text];
//添加后光標定位在最尾部
//slectedRange是一個結構,表示位置和長度,后面的NSMakeRange同樣
//NSUInteger 表示無符號的整型,但用下面兩行設置無效,因為selectedRange是一個屬性,可以獲得值也可以賦值但不是方法不可以操作滾動動作
//NSUInteger len1=textView1.text.length-1;
//textView1.selectedRange=NSMakeRange(len1, 0);
//需要用一下滾動操作的方法,并且把selectedRange屬性值作為Range值傳遞進去
//不滿意的是每次新添加后它都要從Top滾動到尾部,感覺怪怪的
[textView1 scrollRangeToVisible:textView1.selectedRange];
}
//以下四個協議里面的方式和UITextFieldDelegate里地一樣,略去不說
//- (BOOL)textViewShouldBeginEditing:(UITextView *)textView;
//- (BOOL)textViewShouldEndEditing:(UITextView *)textView;
//- (void)textViewDidBeginEditing:(UITextView *)textView;
//- (void)textViewDidEndEditing:(UITextView *)textView;
//一看是BOOL,不是YES就是NO,就是允許修改內容
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{
return YES;
}
//只有在內容改變時才觸發,而且這個改變內容是手動輸入有效,用本例中得按鈕增加內容不觸發這個操作
- (void)textViewDidChange:(UITextView *)textView{
NSLog(@"Did Change");
}
//幾乎所有操作都會觸發textViewDidChangeSelection,包括點擊文本框、增加內容刪除內容
//可以理解為只要于selectedRange有關都會觸發,(位置與長度)
- (void)textViewDidChangeSelection:(UITextView *)textView{
NSLog(@"Did Change Selection");
}
@end
截個圖:

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈