UITextField 方法和代理的使用
阿新 • • 發佈:2018-08-07
lac color placement nsrange nonnull 原來 ani str text (當testField resignFirstResponder之前會調用這個方法)
1.鍵盤的出現與隱藏
//彈出界面的同時就彈出鍵盤 - (void)viewDidAppear:(BOOL)animated{ [super viewDidAppear:animated]; //彈出鍵盤 [self.nameTextField becomeFirstResponder]; } //鼠標點擊一下 隱藏鍵盤 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ //隱藏鍵盤 [self.nameTextField resignFirstResponder]; }
2.delegate的使用
(1)設置
_nameTextField.delegate = self;
@interface ViewController ()<UITextFieldDelegate>
(.h文件中)
(2)使用
1.配置是否可以輸入(當textField becomeFirstResponder之前會調用這個方法)
YES ----可以編輯 能成為第一響應者
NO -----不可以編輯 不能成為第一響應者
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{ NSLog(@"是否可以開始編輯"); return YES; }
2.開始編輯
//開始編輯 (點擊輸入框,即將開始輸入內容) - (void)textFieldDidBeginEditing:(UITextField *)textField{ NSLog(@"開始編輯 "); }
2018-08-07 18:11:43.823 UITextField方法和delegate設置[2854:94610] 是否可以開始編輯 2018-08-07 18:11:43.831 UITextField方法和delegate設置[2854:94610] 開始編輯
(1、2兩步的運行結果)
3.配置是否可以取消第一響應者
YES ----可以取消第一響應者
NO -----不可以取消,一直在那裏等待輸入
//配置是否可以取消第一響應者 是否可以停止輸入內容 - (BOOL)textFieldShouldEndEditing:(UITextField *)textField{ NSLog(@"是否可以停止輸入"); return YES; } @
4.停止編輯
//停止編輯了 - (void)textFieldDidEndEditing:(UITextField *)textField{ NSLog(@"停止編輯"); }
5.鍵盤上的return按鈕被點擊
- (BOOL)textFieldShouldReturn:(UITextField *)textField{ NSLog(@"鍵盤上return按鈕被點擊"); [self.nameTextField resignFirstResponder]; return YES; }
以上幾步運行結果:
2018-08-07 18:25:08.304 UITextField方法和delegate設置[2966:100607] 是否可以開始編輯 2018-08-07 18:25:08.313 UITextField方法和delegate設置[2966:100607] 開始編輯 2018-08-07 18:25:13.693 UITextField方法和delegate設置[2966:100607] 鍵盤上return按鈕被點擊 2018-08-07 18:25:13.693 UITextField方法和delegate設置[2966:100607] 是否可以停止輸入 2018-08-07 18:25:13.707 UITextField方法和delegate設置[2966:100607] 停止編輯
6.實時監聽textField上文本內容的改變(非常重要)
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(nonnull NSString *)string{ //原來顯示的內容 NSLog(@"改變之前的內容:%@", textField.text); //新的內容 = 用string去替換text上range範圍的內容 NSString *newStr = [textField.text stringByReplacingCharactersInRange:range withString:string]; NSLog(@"即將顯示的內容:%@", newStr); return YES; }
運行結果:
2018-08-07 18:34:27.044 UITextField方法和delegate設置[3063:104375] 是否可以開始編輯 2018-08-07 18:34:27.052 UITextField方法和delegate設置[3063:104375] 開始編輯 2018-08-07 18:34:30.593 UITextField方法和delegate設置[3063:104375] 改變之前的內容: 2018-08-07 18:34:30.594 UITextField方法和delegate設置[3063:104375] 即將顯示的內容:E 2018-08-07 18:34:34.719 UITextField方法和delegate設置[3063:104375] 改變之前的內容:E 2018-08-07 18:34:34.719 UITextField方法和delegate設置[3063:104375] 即將顯示的內容:Ef 2018-08-07 18:34:38.015 UITextField方法和delegate設置[3063:104375] 改變之前的內容:Ef 2018-08-07 18:34:38.015 UITextField方法和delegate設置[3063:104375] 即將顯示的內容:Efg 2018-08-07 18:34:39.207 UITextField方法和delegate設置[3063:104375] 改變之前的內容:Efg 2018-08-07 18:34:39.207 UITextField方法和delegate設置[3063:104375] 即將顯示的內容:Efgh 2018-08-07 18:34:41.103 UITextField方法和delegate設置[3063:104375] 改變之前的內容:Efgh 2018-08-07 18:34:41.103 UITextField方法和delegate設置[3063:104375] 即將顯示的內容:Efghj 2018-08-07 18:34:43.759 UITextField方法和delegate設置[3063:104375] 改變之前的內容:Efghj 2018-08-07 18:34:43.760 UITextField方法和delegate設置[3063:104375] 即將顯示的內容:Edging 2018-08-07 18:34:43.763 UITextField方法和delegate設置[3063:104375] 鍵盤上return按鈕被點擊 2018-08-07 18:34:43.763 UITextField方法和delegate設置[3063:104375] 是否可以停止輸入 2018-08-07 18:34:43.776 UITextField方法和delegate設置[3063:104375] 停止編輯
UITextField 方法和代理的使用