UITextView 點擊添加文字 光標處於最后方



#import "ViewController.h" @interface ViewController ()<UITextViewDelegate> @end @implementation ViewController { UITextView *textView1; UITextField *textField1; } - (void)viewDidLoad { self.view.backgroundColor = [UIColor greenColor]; //初始化 textView1=[[UITextView alloc]init]; //設置大小位置 textView1.frame=CGRectMake(10, 30, 390, 300); //設置背景顏色 textView1.backgroundColor=[UIColor orangeColor]; //設置文字內容 textView1.text=@"開始對話"; //設置字體大小,加粗和斜體等 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, 350, 390, 30); textField1.backgroundColor = [UIColor cyanColor]; textField1.borderStyle=UITextBorderStyleRoundedRect; textField1.clearsOnBeginEditing = YES; [self.view addSubview:textField1]; UIButton *btn1=[UIButton buttonWithType:UIButtonTypeRoundedRect]; btn1.frame=CGRectMake(10, 400, 390, 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:@"\n%@",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

(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里面的位置或者長度(也就是光標位置改變和增減內容)發生變化時如何操作。這個……呃……很實用吧。當然還可以輸出變化的內容等等。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM