Keyboard项目中观察者模式解析

该项目旨在解决输入框多层嵌套的情况下软盘和输入框位置不适配的问题。

项目的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

时间: 2024-10-18 01:20:04

Keyboard项目中观察者模式解析的相关文章

项目中观察者模式的应用

目前项目中最多用的模式就是观察者模式了...该模式是当有数据状态变化需要及时通知的时候使用的 项目中其中之一的应用场景: 当网络状态发生变化时影视下载界面提示当前是使用免费的wifi还是机主自己的流量 1.首先定义被观察者的实体类 public class NetworkTypeNotifier extends Observable { //发生变化时调用该方法通知 public void notifyAll(NetworkType networkType) { this.setChanged(

RxPermissions中观察者模式解析

RxPermissons是什么 RxPermissions是一款基于RxJava的Android动态权限管理库.Android从6.0开始引入动态权限管理,不同于以往的APP安装时就授权完毕,对于敏感权限必须由用户手动的在APP运行过程中授权.此举对用户十分友好,但是对于程序员来说就不得不对权限进行管理.如果使用系统原生的方法进行管理,一般方式如下 private void requestPermission() { if (ContextCompat.checkSelfPermission(t

AFNetworking 中观察者模式解析

0. Objective-C 中的观察者模式(KVO) Objective-C 语言实现了观察者模式(Key Value Observing, KVO),并提供了简单的使用接口. 供给使用者方便的注册观察者,注册观察方法,移除观察者. a. 注册观察者 /* 方法的接收者 objectA 是被观察者 objectB 观察的对象 方法的第一个参数 objectB 是注册到 objectA 上的观察者 方法的第二个参数 @"property" 是被观察者 objectB 监听的属性,当该属

文件路径监控项目中观察者模式的分析

1.概述 观察者模式是软件设计模式的一种,它描述了如何建立对象与对象之间的依赖关系,如何构造满足这种需求的系统.这一模式中的关键对象是观察目标和观察者,一个目标可以有任意数目的与之相依赖的观察者,一旦目标的状态发生改变,所有的观察者都将得到通知.作为对这个通知的响应,每个观察者都将即时更新自己的状态,以与目标状态同步,这种交互也称为发布-订阅(publish-subscribe).目标是通知的发布者,它发出通知时并不需要知道谁是它的观察者,可以有任意数目的观察者订阅它并接收通知. 该模式包含四种

在java项目中怎样利用Dom4j解析XML文件获取数据

在曾经的学习.net时常常会遇到利用配置文件来解决项目中一些须要常常变换的数据.比方数据库的连接字符串儿等.这个时候在读取配置文件的时候.我们一般会用到一个雷configuration,通过这个类来进行直接读取,能够说这是程序中直接封装好的,包含配置文件里书写的格式等等.那么,假设.想要在配置文件里写一些其它的数据,直接以XML文件的格式进行书写.这个时候在后台怎样读取XML文件里的数据呢?这里利用Dom4j来解析XML文件里连接oracle数据库的xml数据. 在使用之前,首先要在自己的项目中

在java项目中如何利用Dom4j解析XML文件获取数据

在以前的学习.net时经常会遇到利用配置文件来解决项目中一些需要经常变换的数据,比如数据库的连接字符串儿等.这个时候在读取配置文件的时候,我们通常会用到一个雷configuration,通过这个类来进行直接读取,可以说这是程序中直接封装好的,包括配置文件中书写的格式等等.那么,如果,想要在配置文件中写一些其他的数据,直接以XML文件的格式进行书写,这个时候在后台如何读取XML文件中的数据呢?这里利用Dom4j来解析XML文件中连接oracle数据库的xml数据. 在使用之前,首先要在自己的项目中

SpringBoot 项目中的观察者模式

1.观察者模式的定义: 观察者设计模式定义了对象间的一种一对多的组合关系,以便一个对象的状态发生变化时,所有依赖于它的对象都得到通知并自动刷新. 2.观察者模式的原理: 实现观察者模式有很多形式,比较直观的一种是使用一种"注册--通知--撤销注册"的形式.下面的三个图详细的描述了这样一种过程:其中,观察者模式定义了四种角色:抽象主题.具体主题.抽象观察者.具体观察者. 抽象主题(Subject):该角色是一个抽象类或接口,定义了增加.删除.通知观察者对象的方法. 具体主题(Concre

android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件

1.下载工具 xstream 下载最新版本地址: https://nexus.codehaus.org/content/repositories/releases/com/thoughtworks/xstream/ 下载完成后 把jar包导入到自己的android项目中 2.asset 文件夹 下的 aa.xml 文件 <?xml version="1.0" encoding="UTF-8"?><product>    <name>

浅析vue项目中的观察者模式

一.什么是观察者模式 定义 "观察者模式是软件设计模式的一种.在此种模式中,一个目标对象管理所有相依于它的观察者对象,并且在它本身的状态改变时主动发出通知.这通常透过呼叫各观察者所提供的方法来实现.此种模式通常被用来实时事件处理系统." -------------Wikipedia 作用 当抽象个体有两个互相依赖的层面时.封装这些层面在单独的对象内将可允许程序员单独地去变更与重复使用这些对象,而不会产生两者之间交互的问题. 当其中一个对象的变更会影响其他对象,却又不知道多少对象必须被同