1. 程式人生 > >UITextField 方法和代理的使用

UITextField 方法和代理的使用

lac color placement nsrange nonnull 原來 ani str text

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.配置是否可以取消第一響應者

(當testField resignFirstResponder之前會調用這個方法)

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 方法和代理的使用