美文网首页
iOS 结束当前界面编辑(隐藏键盘)

iOS 结束当前界面编辑(隐藏键盘)

作者: 山杨 | 来源:发表于2017-04-28 13:42 被阅读73次

两种比较好的方式:

方式一: 监听通知 UITextFieldTextDidBeginEditingNotification
#pragma mark - <控制器生命周期>
- (void)viewDidLoad {
    [super viewDidLoad];
// 添加tap手势结束当前编辑(隐藏键盘⌨️)
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(endEditing)];
    [self.view addGestureRecognizer:tap];

    _textFieldObserver = [[NSNotificationCenter defaultCenter] addObserverForName:UITextFieldTextDidBeginEditingNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * _Nonnull note) {
       if ([note isKindOfClass:[UITextField class]]) {
            _currentTextField = note.object;
       }
    }];
}

- (void)viewDidDisappear:(BOOL)animated {
    [super viewDidDisappear:animated];

    [[NSNotificationCenter defaultCenter] removeObserver:_textFieldObserver];
 }
#pragma mark - <结束编辑>
- (void)endEditing {
    [_currentTextField endEditing:YES];
 }
方式二: 使用UITextField的代理方法
#pragma mark - <控制器生命周期>
- (void)viewDidLoad {
    [super viewDidLoad];
// 添加tap手势结束当前编辑(隐藏键盘⌨️)
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(endEditing)];
    [self.view addGestureRecognizer:tap];
}
// 通过代理方法获取当前的 UITextField
#pragma mark - <UITextFieldDelegate>
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
    
    _currentTextField = textField;
    return YES;
}
#pragma mark - <结束编辑>
- (void)endEditing {
    [_currentTextField endEditing:YES];
 }

总结:

对比两种方式, 其实只是获取当前 UITextField 的方式不同而已, 能获取到 FirstResponder 的 UITextField 就能很容易控制键盘(隐藏/出现).

相关文章

网友评论

      本文标题:iOS 结束当前界面编辑(隐藏键盘)

      本文链接:https://www.haomeiwen.com/subject/xlgozttx.html