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

作者: 豆志昂扬 | 来源:发表于2016-06-12 12:39 被阅读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

    更多

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

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

    + 微信扫描下图二维码;

    相关文章

      网友评论

      • 34e0e72ec338:实际过程貌似挺复杂 比如ios6下 输入法提示等操作会Show 各种体验都需要计算优化
        豆志昂扬:@ShawnXiong 谁还支持iOS6,iOS 8以下都不用考虑了
      • fce2a3ecd48a:少了可以这么写,不过挺烦的

      本文标题:iOS 你的键盘遮住输入框了吗?

      本文链接:https://www.haomeiwen.com/subject/kupedttx.html