切换emailTextField与passwordTextField时键盘瞬间消失问题求助
UITextField 切换时键盘闪烁的问题解决
嘿,我刚看了你的代码,问题其实很明显——你没必要手动让邮箱输入框 resign 第一响应者!
问题根源
你在切换输入框时,先执行了[textField resignFirstResponder]让邮箱框失去焦点,紧接着又调用[passwordTextField becomeFirstResponder]让密码框获取焦点。iOS系统会依次处理这两个操作:先收起键盘,再重新弹出键盘,这就导致了键盘瞬间消失再出现的闪烁现象。
其实iOS有个默认行为:当新的UITextField成为第一响应者时,当前的第一响应者会自动 resign,完全不需要你手动调用resign方法。
修正后的代码
把邮箱框的resign操作删掉,直接让密码框成为第一响应者就行:
- (BOOL)textFieldShouldReturn:(UITextField *)textField { if (textField == emailTextField) { // 直接让密码框获取焦点,邮箱框会自动失去焦点 [passwordTextField becomeFirstResponder]; } else if (textField == passwordTextField) { [textField resignFirstResponder]; } return YES; }
额外小贴士
如果修改后还是偶尔出现问题,可以尝试把becomeFirstResponder的调用放到主线程异步队列里,给系统一点处理时间:
- (BOOL)textFieldShouldReturn:(UITextField *)textField { if (textField == emailTextField) { dispatch_async(dispatch_get_main_queue(), ^{ [passwordTextField becomeFirstResponder]; }); } else if (textField == passwordTextField) { [textField resignFirstResponder]; } return YES; }
另外还要确保passwordTextField已经正确初始化并添加到视图层级中,否则becomeFirstResponder会执行失败。
内容的提问来源于stack exchange,提问作者Mallikarjun Hanagandi
相关产品推荐
相关产品推荐

