UITextField 方法和代理的使用

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] 停止编辑
原文地址:https://www.cnblogs.com/frosting/p/9438718.html