该项目旨在解决输入框多层嵌套的情况下软盘和输入框位置不适配的问题。
项目的github源码链接为:https://github.com/crazycodeboy/KeyboardObserver/blob/master/KeyboardObserver/KeyboardObserver.m
一、观察者模式实现原理
观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。当这个主题对象在状态发生变化时,会通知所有观察者对象,使得他们能够更新自己。在此项目中其实现原理主要体现在下几个操作:
-(void)addGlobalKeyboardObserver
为界面中所有的输入框添加键盘观察器,将监听器添加到事件源上,回车键监听,触控其他区域监听。实现当软盘弹出时自动控制输入框的显示位置以防止被软盘遮住,当触控输入框以外的位置时或按软盘的回车键时,软盘隐藏,界面恢复。
-(void)removeGlobalKeyboardObserver
为界面中所有的输入框移除键盘观察器。
-(void)addKeyboardObserver
为指定输入框添加键盘观察器,将监听器添加到事件源上,回车键监听,触控其他区域监听。实现当软盘弹出时自动控制输入框的显示位置以防止被软盘遮住,当触控输入框以外的位置时或按软盘的回车键时,软盘隐藏,界面恢复。
-(void)removeKeyboardObserver
为指定输入框移除键盘观察器。
-(void)addSimpleKeyboardObserver
为指定输入框添加键盘观察器,将监听器添加到事件源上,触控其他区域监听。实现当软盘弹出时自动控制输入框的显示位置以防止被软盘遮住,当触控输入框以外的位置时或按软盘的回车键时,软盘隐藏,界面恢复。
-(void)removeKeyboardObserver
为指定输入框移除键盘观察器。
-(void)registerKeyboardNotifications
事件源变化触发事件(具体主题角色状态改变,通知观察者)。
-(void)removeKeyboardNotifications
移除事件源的监听器,不再触发事件。
二、观察者模式的作用
1.当软盘弹出时自动控制输入框的显示位置以防止被软盘遮住。
2.当触控输入框以外的位置时或按软盘的回车键时,软盘隐藏,界面恢复。
3.支持对整个页面所有的输入框添加监听和移除监听。
4.支持对指定输入框的添加监听和移除监听。
5.使用简单,只需一行代码便可完成监听配置。
原文地址:https://www.cnblogs.com/huang-t/p/9822458.html