Swift3.0 Notification 监控键盘的弹出与收回

1.注册/移除通知:

override func viewDidLoad() {

       super.viewDidLoad()

       

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

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

    }

    

    deinit {

       //移除通知

       NotificationCenter.default.removeObserver(self)

    }


2.实现通知的方法:

//键盘的出现

    func keyBoardWillShow(_notification: Notification){

        //获取userInfo

       let kbInfo = notification.userInfo

        //获取键盘的size

       let kbRect =(kbInfo?[UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue

        //键盘的y偏移量

       let changeY = kbRect.origin.y -SCREEN_HEIGHT

        //键盘弹出的时间

       let duration =kbInfo?[UIKeyboardAnimationDurationUserInfoKey] as!Double

       

        //界面偏移动画

       UIView.animate(withDuration: duration) {

           

           self.aTableView.transform= CGAffineTransform(translationX: 0, y:changeY)

       }

    }

    

    //键盘的隐藏

    func keyBoardWillHide(_notification: Notification){

       

       let kbInfo = notification.userInfo

       let kbRect =(kbInfo?[UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue

/*

* let kbRect = (userInfo![UIKeyboardFrameEndUserInfoKey] as AnyObject).cgRectValue

* swift2.3正常,swift3.0取值为nil

*/

       let changeY = kbRect.origin.y

       let duration =kbInfo?[UIKeyboardAnimationDurationUserInfoKey] as!Double

       

       UIView.animate(withDuration: duration) {

           self.tableViewConstraint.update(inset:0)

       }

    }


思路整理:

1.view消失,检查frame的origin

2.第一思路:closure没有捕获变量;错误

  第二思路:notification.userInfo有值;有UIKeyboardFrameEndUserInfoKey键,有value;

查看新的取值方法。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值