iOS首页投稿(暂停使用,暂停投稿)iOS Developer

iOS 你的键盘遮住输入框了吗?

2016-06-12  本文已影响974人  豆志昂扬

大部分应用都有要求用户键入数据的场景,如果开发者不做特别处理,弹起的键盘会遮住位于界面底部输入框(UITextField/UITextView),为了更好的用户体验,开发者需要去解决这个问题。

注:如果输入框所在的控制器继承自UITableViewController,由于UITableViewController已经内在地相应并处理了键盘事件,当用户准备输入时,UITableView会向上滚动直到输入框出现在键盘上方,自动解决了键盘遮住输入框的问题。

采用第三库是一种解决问题的思路,这种办法对已有项目侵入性较强,未知风险大,而如果在应用内,仅有一处键盘遮住输入框,此时引用笨重的第三种有点得不偿失,这就需要开发者手动地自己处理这个问题。

具体思路如下:

1. 注册键盘相应监听事件。

注册事件在控制器或视图出现后,如viewDidAppear中,在viewWillAppear中会出现不必要的重复注册,Swift代码如下:

//注册监听键盘出现事件

NSNotificationCenter.defaultCenter().addObserver(self,selector:#selector(keyboardWillShow), name:UIKeyboardWillShowNotification, object:nil)

//注册监听键盘消失事件

NSNotificationCenter.defaultCenter().addObserver(self,selector:#selector(keyboardWillHide), name:UIKeyboardWillHideNotification, object:nil)

2. 通过捕捉通知消息里的键盘高度,调整视图位置到键盘以上。当键盘消失时,视图调整到原来位置。

//调整视图位置  

let userInfo = notification.userInfo!

let keyboardSize

= userInfo[UIKeyboardFrameBeginUserInfoKey]?.CGRectValue().size

//也可获取键盘动画持续的事件,如果调整视图动画时间保持一致让体验更好

let animationDuration = userInfo[UIKeyboardAnimationDurationUserInfoKey] as! NSValue as! NSTimeInterval

UIView.animateWithDuration(animationDuration, delay:0, options:UIViewAnimationOptions.init(rawValue: animationCurve), animations: {

         // TODO: 手动设置视图坐标大小等

         //键盘高度 keyboardSize.height

}, completion:nil)

//记得在方法keyboardWillHide内恢复视图位置

如果输入框在UITableView或UIScrollView,可以通过设置contentOffset调整父视图状态。

3. 注销键盘响应监听事件。

注销事件在控制器或视图消失时,如viewWillDisappear中。Swift代码如下:

//注销上面注册的事件监听器

NSNotificationCenter.defaultCenter().removeObserver(self,name:UIKeyboardWillShowNotification, object:nil)

NSNotificationCenter.defaultCenter().removeObserver(self,name:UIKeyboardWillHideNotification, object:nil)

最后有了清晰的思路,后面就是Coding!

推荐阅读:

iOS开发第三方库一 IQKeyboardManager

更多

获取更多内容请关注微信公众号豆志昂扬:

+ 直接添加公众号豆志昂扬

+ 微信扫描下图二维码;

上一篇下一篇

猜你喜欢

热点阅读