美文网首页
关于键盘遮住输入框的解决办法

关于键盘遮住输入框的解决办法

作者: 墙角一枝梅5 | 来源:发表于2018-01-12 14:21 被阅读109次

        做app开发,经常会遇到输入框被键盘遮住的情况,譬如注册界面有很多信息需要输入,点击靠屏幕下方的输入框就会遇到输入框被键盘遮住的情况。查阅网上的很多资料,有的是仅依靠UITextField的三个代理方法加上写死键盘的高度来解决的,还有的是依靠一个第三方库IQKeyboardManager,依靠第三方库固然节省了很多开发时间,但是如果你的项目仅仅只是注册界面一个界面用到,导入库反而没有自己几句代码写的方便。下面我把自己的解决方法介绍一下,供大家参考。

(注释:下面代码使用Swift语言,OC语言同理)

大体思路:使用键盘通知UIKeyboardWillShow和UIKeyboardWillHide,配合UITextFieldDelegate代理方法func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool解决。实现如下图所示的界面:

邮箱注册

注意:如果是小屏幕手机的话,按下面三个输入框的时候,键盘就会遮住输入框

要注意两个问题:1、不是所有系统键盘高度都是一样的,需要去动态获取 

2、键盘通知和代理方法textFieldShouldBeginEditing的调用是代理方法先调用,键盘通知后调用

解决方案:

@IBOutlet weak var scrollView: UIScrollView!

private var textFieldTmp:UITextField?

override func viewDidLoad() {

        super.viewDidLoad()

//一定要写上代理,不然下面的textFieldDelegate方法不会执行

        tfEmail.delegate = self

        tfAuthCode.delegate = self

        tfPWD.delegate = self

        tfConfirmPWD.delegate = self

        tfRealName.delegate = self

        NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillAppear(_:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil)

        NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillDisapear(_:)), name: NSNotification.Name.UIKeyboardWillHide, object: nil)

}

func keyboardWillAppear(_ notification:Notification){//键盘出现

        let keyboardInfo = notification.userInfo![UIKeyboardFrameBeginUserInfoKey]

        let keyboardHeight = (keyboardInfo! as AnyObject).cgRectValue.size.height//键盘高度

       let rect = textFieldTmp?.convert((textFieldTmp?.frame)!, to: self.scrollView)//这里要看上面的那些textFiled是不是嵌套在别的view上,否则获取的rect是不准确的

        if kScreenHeight - kNavigationAndStatusBarHeight - ((rect?.origin.y)! + 44) < keyboardHeight {

            let yOffset = keyboardHeight - (kScreenHeight - kNavigationAndStatusBarHeight - ((rect?.origin.y)! + 44))

            self.scrollView.setContentOffset(CGPoint(x: 0, y: yOffset), animated: true)

        }

    }

    func keyboardWillDisapear(_ notification:Notification) {//键盘消失

        self.scrollView.setContentOffset(CGPoint(x: 0, y: 0), animated: true)

    }

///mark - UITextFieldDelegate

    func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {

        textFieldTmp = textField

        return true

    }

希望对大家有所帮助

相关文章

网友评论

      本文标题:关于键盘遮住输入框的解决办法

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