Ziank的技术博客

键盘处理

本文主要讲述iOS中键盘的常用方法和注意事项。

键盘焦点方法

键盘事件主要有两个,一个是获得焦点,一个是失去焦点。或者说一个是呼出键盘,另一个是消失键盘。

获得焦点

获取焦点的方法为becomeFirstResponder,我们可以通过调用这个方法来呼出键盘。**需要注意的是,只有支持编辑的控件才可以呼出键盘,如UITextView,UITextField;而普通的控件或UIView即使获取焦点也不会呼出键盘,如UITableViewUIButton

如果想使用webView自动获取焦点,那么一定不要忘记设置keyboardDisplayRequiresUserActionfalse,否则键盘不会弹出。


失去焦点

常用的失去焦点的方法为resignFirstResponder,调用这个方法可以让当前控件失去焦点,从而使键盘落下;需要注意的是调用方法的对象必须是弹出键盘的控件本身,而不能是其父View

如果没有办法获取到获取焦点的控件本身,而必须利用其父View失去焦点的话,可以使用另一个方法endEdit,这个方法带有一个参数,为是否强制终止编辑,一般选择为YES,从而使键盘消失。

如果不是必须的话,更建议大家使用resignFirstResponder方法

键盘事件通知

iOS系统支持的常用键盘事件通知有六个,分别是

1
2
3
4
5
6
UIKeyboardWillShowNotification // 键盘将要出现
UIKeyboardDidShowNotification // 键盘已经出现
UIKeyboardWillHideNotification // 键盘将要消失
UIKeyboardDidHideNotification // 键盘已经消失
UIKeyboardWillChangeFrameNotification // 键盘将要修改frame
UIKeyboardDidChangeFrameNotification // 键盘已经修改frame

在这些事件的userInfo中会有以下几个属性,可以用于进行界面的处理。

1
2
3
4
5
6
7
8
9
UIKeyboardFrameBeginUserInfoKey // 开始时的键盘位置
UIKeyboardFrameEndUserInfoKey // 结束时的键盘位置
UIKeyboardAnimationCurveUserInfoKey // 动画类型
UIKeyboardAnimationDurationUserInfoKey // 动画持续事件
UIKeyboardIsLocalUserInfoKey // 是否为本地用户键盘
UIKeyboardCenterBeginUserInfoKey // 开始时的键盘中心
UIKeyboardCenterEndUserInfoKey // 结束时的键盘中心
UIKeyboardBoundsUserInfoKey // 键盘边界

后面三个属性用户可以根据前两个进行计算。需要注意的是在iPad上由于键盘支持浮动,需要支持UIKeyboardWillChangeFrameNotificationUIKeyboardDidChangeFrameNotification两个键盘通知。

自定义键盘

UITextViewUITextField

由于UITextViewUITextField支持属性inputViewinputAccessoryView,所以只需要把要替换键盘和工具栏的界面画好,直接进行设置尽可以了。

UIWebView

对于UIWebView的键盘处理比较麻烦,需要手动去掉accessoryView,具体的去除方法可以参考网上一些实现。
如iOS8下可以参考Remove Next / Previous buttons (inputAccessoryView) for Custom Keyboard in iOS8 WebView

就写这些吧,更多的还要在实践中具体分析使用。