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

UITextField详解:3-UITextField的代理方法实例之键盘回收

所谓键盘回收就是当用户完成输入后,把弹出的键盘进行隐藏操作。隐藏键盘的操作除了用户完成输入后需要执行,还需要考虑到一些其他的用户交互情况下也需要隐藏键盘,例如,当用户切换输入框或者是用户在屏幕的任意位置进行了点击,此时都应该考虑把弹出的键盘进行回收。此篇文章我们用UITextFieldDelegate中的代理方法实现键盘的回收功能。

键盘回收简介

在实际的开发过程中,如下几种情形需要我们考虑回收键盘:

  • 用户完成了输入,点击了键盘中的完成按钮、返回按钮或继续按钮等
  • 用户点击了屏幕的任意位置,此时有可能是用户希望进行其他的操作,也需要隐藏键盘

当我们需要进行键盘回收时,可以使用如下两种方法。这两种方法的本质是相同的,都是释放视图对象的第一响应者。

  • 调用UIResponder类的resignFirstResponder方法
- (BOOL)resignFirstResponder;
  • 调用UITextField类的endEditing:方法,该方法本质上是对UIResponder类的resignFirstResponder:进行了封装
- (BOOL)endEditing:(BOOL)force;

示例代码

下方的示例代码实现了对一个UITextField对象进行键盘回收的过程,当用户点击键盘的完成键时,或者点击屏幕的任意位置时,都可以回收键盘。

  • 准备工作。创建一个UITextField类的属性,并对该属性进行懒加载操作,设置其外观属性。并且设置控制器类遵守UITextFieldDelegate协议。
@interface ViewController ()<UITextFieldDelegate>
@property(nonatomic,strong) UITextField *textField;
@end
-(UITextField *)textField {
    if (_textField == nil) {
        _textField = [[UITextField alloc] initWithFrame:CGRectMake(50, 50, 250, 50)];
        _textField.backgroundColor = [UIColor whiteColor];
        _textField.placeholder = @"欢迎访问99iOS";;
        _textField.textAlignment = NSTextAlignmentCenter;
        _textField.borderStyle = UITextBorderStyleRoundedRect;
        _textField.returnKeyType = UIReturnKeyDone;
        _textField.delegate = self;
    }
    return _textField;
}
- (void)viewDidLoad {
    [super viewDidLoad];
    //添加textField对象到控制器view
    [self.view addSubview:self.textField];
}
  • 当用户点击键盘的完成键时,调用endEditing:方法实现键盘回收
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    [textField endEditing:YES];
    return YES;
}
  • 当用户点击屏幕任意位置时,会调用touchesBegan:withEvent:方法,在该方法中也添加释放键盘的操作。
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    [self.textField resignFirstResponder];
}

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