IQKeyboardManager 源代码看看

IQKeyboardManager 三步走

大家都用 IQKeyboardManager,

IQKeyboardManager 引入,就管理好了

第 1 步,注册系统通知,获得键盘事件

从键盘事件中,得到输入文本框对象, UITextField / UITextView 的实例

IQKeyboardManager 初始化的时候,就完成了这些

第 2 步,计算出当前文本框的位置, 并移动

有了文本框,要找到他当前的位置,frame

就要从文本框溯源,找到他的根视图控制器

然后计算出当前文本框在哪个位置合适,

移动过去,就好了

2.1 , 计算出合适的位置

先算出,该文本框在根视图的位置

再算出,该文本框在当前窗口, KeyWindow, 中的合适位置

2.2,键盘出现,与键盘消失

开始编辑,键盘出现,移动位置

结束编辑,键盘消失,还原位置

3,情况判断

UIView 上放置几个 UITextField / UITextView ,好处理

UIView 上放置 UITableView, UITableView 上的一个 cell,上面摆放 UITextField / UITextView,就复杂了一些

3.1 特殊类处理,

对于 UIAlertController 的输入框,不用处理

比较特殊的,还有 UITableViewController、UISearchBar、

_UIAlertControllerTextFieldViewController

0, 键盘管理,很简单

对于一个输入框 UITextField , 放置在 UIView 上,

键盘出来了,这个 UITextField 的位置,要适当,

通过两个通知处理掉,

一般情况下,键盘出来,把 UITextField 位置放高一点,

键盘消失,把 UITextField 位置放回原处

    import SnapKit
    
    // 注册通知
    func config(){
    	NotificationCenter.default.addObserver(self,
                             selector: #selector(self.keyboardWillShow(noti:)),
                             name: UIWindow.keyboardWillShowNotification,
                             object: nil)
        NotificationCenter.default.addObserver(self,
                             selector: #selector(self.keyboardWillHide(noti:)),
                             name: UIWindow.keyboardWillHideNotification,
                             object: nil)
    }
    
    
    // 放高一点
    @objc
    func keyboardWillShow(noti notification: NSNotification){
        yConstraint?.constraint.update(offset: s.height * (-0.5))
        layoutIfNeeded()
    }
    
    
    
	// 放回原处
    @objc
    func keyboardWillHide(noti notification: NSNotification){
        yConstraint?.constraint.update(offset: 0)
        layoutIfNeeded()
    }

对于 UITextView,也这样处理

IQKeyboardManager 做的工作,就复杂、全面了很多


1, 初始化工作

注册 4 个键盘通知,

键盘将要出现,键盘出现了,

键盘将要消失,键盘消失了,

输入文本框,有两种,UITextField 和 UITextView

再注册两个 UITextField 的通知,两个 UITextView 的通知

最后注册一个屏幕旋转的通知

@objc func registerAllNotifications() {

        //  Registering for keyboard notification.
        NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillShow(_:)), name: UIKeyboardWillShowNotification, object: nil)
        NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardDidShow(_:)), name: UIKeyboardDidShowNotification, object: nil)
        NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillHide(_:)), name: UIKeyboardWillHideNotification, object: nil)
   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值