keyBoardForTextfield

一个小问题

最近做了一个注册模块, 其中有一个页面需要填写多项信息, 部分是通过键盘输入(A TextField), 部分是通过弹出 pickerView 以后进行选择(B TextField), 由于 UI 设计的问题, 我就偷懒全用了 UITextField, 这时候遇到了一个小问题, 需要弹出 pickerView 的时候, 我不希望弹出键盘, 我自然的用上了 resignFirstResponder() 这个方法. 结果从 B 失去焦点到 A 获取焦点这个过程中, 键盘依然稳稳的留在屏幕底部. 于是我又尝试了

1
2
UIView().endEditing(force: true)
UIApplication.shared().keyWindow.endEditing(force: true)

这两个方法试图从全局取消键盘, failed. 键盘依然坚挺.

原因: 都是动画惹的祸
键盘弹出和收起都有一个 0.25s 的系统自带动画, 如果在这个过程中过快的转换 firstResponder, 键盘动画冲突, 导致键盘彻底失去了 responder.

最直接的解决办法
延迟0.25s, 但是这样的话, 达不到需求, 在点击 A 的时候最终的确不会出现键盘, 但是键盘从收起到弹出再收起还是会有一个过程.

优化
一句代码解决:

1
textfield.inputView = UIView(frame: CGRect.zero)

凡是不需要弹起键盘的 TextField, 在初始化的时候加上这句代码即可.

多说一句
系统自带的动画很容易引发各种问题, 比如 UIPageViewController 的转场动画就会在滑动过快的时候导致崩溃.

文章目录
  1. 1. 一个小问题
|