键盘监听的使用

来源:互联网 发布:如何应用安卓源码 编辑:程序博客网 时间:2024/06/06 08:23

在实际开发中监听键盘弹出,让某一个View或者是TextField跟随键盘移动,这样的情况非常普遍。在这里自己总结一下,帮助自己复习,另外也起到一个备忘的作用吧。
方案如下,可能不是最好,但是在没有发现更好的方法前就用这个吧。

第一步:创建添加监听事件方法

func addKeyboardObserver() {        NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillShow:", name: UIKeyboardWillShowNotification, object: nil)        NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillHide:", name: UIKeyboardWillHideNotification, object: nil)    }

创建监听方法,在设置监听的位置调用,当然可以在viewDidload或者willDidload中直接添加也可以,我个人的习惯是,能写成方法的就尽量写成方法,以后复制粘贴比较方便

第二步:创建删除监听事件方法

func removeKeyboardObserver() {        NSNotificationCenter.defaultCenter().removeObserver(self)    }

添加完之后,就立刻写一个删除监听的方法与其对应起来

第三步:实现监听中声明的方法

func keyboardWillShow(sender: NSNotification) {        guard let userInfo = sender.userInfo else {            return        }        guard let keyboardSize = userInfo[UIKeyboardFrameEndUserInfoKey]?.CGRectValue else {            return        }        guard let keyboardDuration = userInfo[UIKeyboardAnimationDurationUserInfoKey]?.doubleValue else {            return        }        guard let keyboardCurve = userInfo[UIKeyboardAnimationCurveUserInfoKey]?.intValue else {            return        }        searchBarConstraint.constant = keyboardSize.height        UIView.animateWithDuration(keyboardDuration, delay: 0, options: UIViewAnimationOptions(rawValue: UInt(keyboardCurve)), animations: {            self.view.layoutIfNeeded()            }, completion: nil)    }    func keyboardWillHide(sender: NSNotification) {        guard let userInfo = sender.userInfo else {            return        }        guard let keyboardDuration = userInfo[UIKeyboardAnimationDurationUserInfoKey]?.doubleValue else {            return        }        guard let keyboardCurve = userInfo[UIKeyboardAnimationCurveUserInfoKey]?.intValue else {            return        }        searchBarConstraint.constant = 0        UIView.animateWithDuration(keyboardDuration, delay: 0, options: UIViewAnimationOptions(rawValue: UInt(keyboardCurve)), animations: {            self.view.layoutIfNeeded()            }, completion: nil)    }

从userInfo 中提取到键盘的高度,运动的时间,运动的模式。然后设置layout的属性,这里设置的是从storyboard中拖线过来的约束,根据userInfo中的属性来设置约束,并动画改变,这样一来就可以让某个View跟随键盘上下滚动了。

0 0