ZYKeyboardUtil 全自动处理键盘遮挡事件
键盘遮盖输入控件或按钮在日常app开发中避之不及,考虑各种情况下UI各种嵌套,最后还要注册监听再获取指定键盘信息。我们可以通过键盘处理工具类ZYKeyboardUtil避繁就简,利用Block的方式处理键盘遮盖问题。
Demo地址: https://github.com/liuzhiyi1992/ZYKeyboardUtil
主要应对:
横竖屏键盘遮挡输入控件问题
第三方键盘多次弹出的坑
视图多层嵌套内输入控件处理
单页面内多个输入控件处理
ZYKeyboardUtil 通过lazy方式注册键盘通知监听者, 一个Block 全自动处理键盘遮挡事件(处理/恢复),另外附带两个自定义动作Block供使用者自己处理。
内部类KeyboardInfo充当model存储着每次处理时所需的键盘信息。
配置animateWhenKeyboardAppearAutomaticAnimBlock即可全权交于ZYKeyboardUtil处理键盘遮挡输入控件问题的发生。附带的自定义动作Block中,animateWhenKeyboardAppearBlock作键盘展示时的处理,animateWhenKeyboardDisappearBlock作键盘收起时的处理,而printKeyboardInfoBlock用作在必要时输出键盘信息。AppearBlock和DisappearBlock统一加入了UIViewAnimation,使用时只需要编写需要的界面变化即可。
横竖屏试验:
输入控件多层嵌套:
第三方键盘分次弹出问题:
如何使用:
在我们的controller中,创建一个ZYKeyboard对象,为了让其生存在整个页面实现功能的时间段内,让你的controller持有他。
self.keyboardUtil = [[ZYKeyboardUtilalloc] init];
处理键盘事件:
配置animateWhenKeyboardAppearAutomaticAnimBlock ,即可全自动处理键盘升降遮挡输入控件问题,且控件resignFirstResponder后自动还原。 只需在Block里利用参数keyboardUtil调用adaptiveViewHandleWithController:adaptiveView:,第一个参数为当前页面controller,第二个参数接收一个可变参数,为当前页面内的单个/多个输入控件或者包裹输入控件的View。
__weakViewController *weakSelf = self;
[_keyboardUtilsetAnimateWhenKeyboardAppearAutomaticAnimBlock:
^(ZYKeyboardUtil *keyboardUtil) {
[keyboardUtiladaptiveViewHandleWithController:
weakSelfadaptiveView:
weakSelf.inputViewOne, weakSelf.inputViewSecond,
weakSelf.inputViewThird,
weakSelf.inputViewFourth, nil];
}];
以下为附加的自定义动作Block:
//展开事件 [_keyboardUtilsetAnimateWhenKeyboardAppearBlock:
^(int appearPostIndex, CGRectkeyboardRect, CGFloatkeyboardHeight, CGFloatkeyboardHeightIncrement) {
//do something when keyboard appear
}];
appearPostIndex是 键盘分次展开时(第三方键盘会分次展开) 用于记录当前为同一次展开的第几次上升。
keyboardRect为此次展开后键盘位置的Rect。
keyboardHeight为此次展开后键盘高度。
keyboardHeightIncrement为此次展开键盘的增量。(应付第三方键盘分次展开的关键)。
//收起事件[_keyboardUtilsetAnimateWhenKeyboardDisappearBlock:
^(CGFloatkeyboardHeight) {
//do something to restor UI when keyboard dismiss
}];
keyboardHeight为键盘收起前的高度。
//获取键盘信息 [_keyboardUtilsetPrintKeyboardInfoBlock:
^(ZYKeyboardUtil *keyboardUtil, KeyboardInfo *keyboardInfo) {
//you can get keyboardInfo here when animation ended
}];
在这个Block的参数中可以获得键盘信息keyboardInfo。
注意不要忘了通过weakSelf来避免Block的循环引用: __weak ViewController *weakSelf = self;
ZYKeyboardUtil 全自动处理键盘遮挡事件的更多相关文章
- 『零行代码』解决键盘遮挡问题(iOS)
关注仓库,及时获得更新:iOS-Source-Code-Analyze https://github.com/draveness/iOS-Source-Code-Analyze Follow: Dra ...
- iOS键盘遮挡问题解决办法
iOS开发之“键盘遮挡输入框的解决办法”之一 -----键盘通知之前处理这种问题,总是在触发输入框编辑事件键盘弹出的时候,将当前的View整体向上移动,结束编辑又整体向下移,耗时耗力效率低. 在网上看 ...
- iOS- UITextView与键盘回收与键盘遮挡输入框
一.UITextView 可以实现多行输入的文本框,基本属性与UITextField相似,可以输入多行,可以滚动.UITextView还有个代理方式- (BOOL)textView:(UITextVi ...
- 移动端底部input被弹出的键盘遮挡
https://developer.mozilla.org/zh-CN/docs/Web/API/Element/scrollIntoView 移动端input被键盘遮挡,事件是跳到可视区域! doc ...
- H5 移动端 键盘遮挡焦点元素解决方案
前言 最近在做 webapp,遇到了很多移动端兼容的问题,其中一个问题就是:输入框触发 focus 后,键盘弹出,然后遮住了输入框. 然后在Android和IOS上,这个问题的表现形式不一样,而原生键 ...
- React-native键盘遮挡输入框问题的解决
2016年10月25日更新: 现在有一个更准确一点的做法是用一个View包裹住TextInput,然后通过该View的onLayout方法获取该输入框的y轴位置,再减去一个适当的高度去处理scroll ...
- iOS 开发之路(登陆页键盘遮挡输入框问题)一
在学习开发登陆页的时候,遇到的问题分享如下: 首先是swift 3.0 中,NotificationCenter 设置 selector 如下: @IBOutlet weak var bottomCo ...
- iOS开发笔记11:表单键盘遮挡、浮点数价格格式化显示、省市区选择器、View Debugging
1.表单键盘遮挡 应用场景为一个collectionView上有多个textfield.textView供用户填写信息. 之前输入项较少时,采取的方法比较粗暴,didSelectItemAtIndex ...
- Android软键盘遮挡的四种解决方案
问题概述 在编辑框输入内容时会弹出软键盘,而手机屏幕区域有限往往会遮住输入界面,我们先看一下问题效果图: 输入用户名和密码时,系统会弹出键盘,造成系统键盘会挡住文本框的问题,如图所示: 输入密码时输入 ...
随机推荐
- Unity3D C#脚本开发学习
1. Inherit from MonoBehaviour,All behaviour scripts must inherit from MonoBehaviour (directly or ind ...
- Java面试题相关内容
选择题(共5题,每题1.5分,共75分.多选题选不全或选错都不得分.)1. 以下属于面向对象的特征的是(C,D).(两项)A) 重载B) 重写C) 封装D) 继承 2. 以下代码运行输出是(C)pub ...
- Quartz1.8.5例子(二)
/* * Copyright 2005 - 2009 Terracotta, Inc. * * Licensed under the Apache License, Version 2.0 (the ...
- BZOJ 1237 配对
Description 你有\(n\)个整数\(A_{i}\)和\(n\)个整数\(B_{i}\).你需要把它们配对,即每个\(A_{i}\)恰好对应一 个\(Bp_{i}\).要求所有配对的整数差的 ...
- Java学习IO篇
来吧,同志们,为复习网络编程做准备-- 一.理论准备 流是个抽象的概念,是对输入输出设备的抽象,Java程序中,对于数据的输入/输出操作都是以"流" ...
- SAP Crystal Dashboard Design 2011 win7 x64 安装
suggest: unZip the setup package to C:\dashboard\ (make sure that the path cannot contain non-unico ...
- 提高matlab运行速度和节省空间的心得
提高matlab运行速度和节省空间的心得 首先推荐使用matlab 2006a版本,该版本优点很多(不过有一个小bug,就是通过GUI自动生成的m文件居然一大堆warning,希望在已经发布了的200 ...
- /etc/shadow字段详解
1)/etc/shadow 概说: /etc/shadow文件是/etc/passwd 的影子文件,这个文件并不由/etc/passwd 而产生的,这两个文件是应该是对应互补的:shadow内容包括用 ...
- keil 工程中多文件编译时全局变量怎么引用
由于代码较多时,为了代码的工整以及易读性,往往将代码拆分成模块,并书写头文件.但keil中定义全局变量往往是一件头疼的事情. (1)xx.h文件中基本书写的是管脚定义和函数声明,全局变量不能定义在头文 ...
- leetcode面试准备: Jump Game
1 题目 Given an array of non-negative integers, you are initially positioned at the first index of the ...