美文网首页
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