免费开源的iOS开发学习平台

UITextField详解:2-UITextField的代理方法简介

在实际开发中我们经常要监控UITextField的各种输入状态,以便在不同的输入状态或者时机执行一些特殊的操作。例如,搜索框中,可以随着用户输入的文字来实现实时的内容搜索,这时候就要用到UITextFieldDelegate中的代理方法。

UITextField代理方法介绍

在UITextField类中定义的如下代理方法相对常用,需要程序员重点学习掌握。

  • 当开始输入时调用。即当这个UITextField对象成为第一响应者的时候调用。
- (void)textFieldDidBeginEditing:(UITextField *)textField; 
  • 编辑结束时调用。在iOS10中,又引入了一个新的方法,该方法可以获取编辑结束的原因,以便进一步处理。
- (void)textFieldDidEndEditing:(UITextField *)textField;  
- (void)textFieldDidEndEditing:(UITextField *)textField reason:(UITextFieldDidEndEditingReason)reason NS_AVAILABLE_IOS(10_0); 
  • 是否允许编辑,当返回值是NO时,此时UITextField对象不能输入任何内容
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField; 
  • 是否允许编辑结束,并且放弃第一响应者状态
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField; 
  • 是否响应清除按钮
- (BOOL)textFieldShouldClear:(UITextField *)textField; 
  • 是否响应键盘上的返回按钮
- (BOOL)textFieldShouldReturn:(UITextField *)textField; 

示例代码

下方的示例代码创建了一个UITextField对象,并且设置控制器为其代理,然后实现了两个代理方法,分别在开始输入以及结束输入时调用。

  • 创建UITextField对象并设置代理
- (void)viewDidLoad {
    [super viewDidLoad];
    UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(50, 50, 250, 50)];
    textField.backgroundColor = [UIColor whiteColor];
    textField.placeholder = @"欢迎访问99iOS";;
    textField.textAlignment = NSTextAlignmentCenter;
    textField.borderStyle = UITextBorderStyleRoundedRect;
    textField.delegate = self;
    [self.view addSubview:textField];
}
  • 设置控制器类遵守UITextFieldDelegate协议
@interface ViewController ()<UITextFieldDelegate>
@end
  • 实现代理协议
- (void)textFieldDidBeginEditing:(UITextField *)textField;{
    NSLog(@"%s",__func__);
    NSLog(@"开始输入内容!");
}

- (void)textFieldDidEndEditing:(UITextField *)textField reason:(UITextFieldDidEndEditingReason)reason{
    NSLog(@"%s",__func__);
    NSLog(@"输入结束!");
}

运行结果如下,当开始输入以及结束输入时,会调用对应的代理方法,并执行其中的操作。

https://github.com/99ios/7.7.2