iOS开发(5)动态监听键盘通知
众所周知,在ios开发的页面传值和监听代理两个环节中,通知Notification是一个重量级角色。
这里主要介绍一下一种特殊ios自带的通知,如
UIKeyboardWillChangeFrameNotification
首先,让我们创建一个监听键盘的通知
//注册观察者
[[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(keyBoardWasChange:)name:UIKeyboardWillChangeFrameNotificationobject:nil];
这种通知是被苹果封装在UIWindow的.h文件中
UIKIT_EXTERNNSString *const UIKeyboardWillShowNotification;
UIKIT_EXTERNNSString *const UIKeyboardDidShowNotification;
UIKIT_EXTERNNSString *const UIKeyboardWillHideNotification;
UIKIT_EXTERNNSString *const UIKeyboardDidHideNotification;
UIKIT_EXTERNNSString *const UIKeyboardFrameBeginUserInfoKey NS_AVAILABLE_IOS(3_2);// NSValue of CGRect
UIKIT_EXTERNNSString *const UIKeyboardFrameEndUserInfoKey NS_AVAILABLE_IOS(3_2);// NSValue of CGRect
UIKIT_EXTERNNSString *const UIKeyboardAnimationDurationUserInfoKeyNS_AVAILABLE_IOS(3_0);// NSNumber of double
UIKIT_EXTERNNSString *const UIKeyboardAnimationCurveUserInfoKey NS_AVAILABLE_IOS(3_0);// NSNumber of NSUInteger
以上就是关于键盘所有的通知类型,但是基本只需要UIKeyboardWillChangeFrameNotification这一个就可以做到你想要的做的。
下面来实现注册通知时的相应方法
- (void)keyBoardWasChange:(NSNotification *)noti
{
NSDictionary *infoDic = [noti userInfo];
//由字典的键值对可知键盘的位置属性
CGRect rect = [[infoDicobjectForKey:UIKeyboardFrameEndUserInfoKey]CGRectValue];
CGFloat f = self.textfieldView.frame.origin.y + self.textfieldView.frame.size.height;
CGFloat p = rect.origin.y;
//弹出键盘
if(p == 264)
{
//下面是我自己封装的动画,就是怕键盘遮住了输入框而将输入框上移的动作
[ZxkAnimationmoveAnimationWithView:self.textfieldViewfromPoint:CGPointMake(self.textfieldView.center.x,self.textfieldView.center.y)ToPoint:CGPointMake(self.textfieldView.center.x,self.textfieldView.center.y - f + 230)Duration:0.2];
}
//收回键盘
else if(p ==480)
{
[ZxkAnimationmoveAnimationWithView:self.textfieldViewfromPoint:CGPointMake(self.textfieldView.center.x,self.textfieldView.center.y - f + 230)ToPoint:CGPointMake(self.textfieldView.center.x,self.textfieldView.center.y)Duration:0.2];
}
//弹出中文选择框
else if(p ==228)
{
//没记错的话,中文框应该是36高
[ZxkAnimationmoveAnimationWithView:self.textfieldViewfromPoint:CGPointMake(self.textfieldView.center.x,self.textfieldView.center.y - f + 230)ToPoint:CGPointMake(self.textfieldView.center.x,self.textfieldView.center.y - f + 194)Duration:0.2];
}
}
输出通知的infoDic可以看到下面几个键值对
UIKeyboardAnimationCurveUserInfoKey = 0;
UIKeyboardAnimationDurationUserInfoKey = "0.25";
UIKeyboardBoundsUserInfoKey = "NSRect: {{0, 0}, {320, 216}}";
UIKeyboardCenterBeginUserInfoKey = "NSPoint: {160, 676}";
UIKeyboardCenterEndUserInfoKey = "NSPoint: {160, 460}";
UIKeyboardFrameBeginUserInfoKey = "NSRect: {{0, 568}, {320, 216}}";
UIKeyboardFrameChangedByUserInteraction = 0;
UIKeyboardFrameEndUserInfoKey = "NSRect: {{0, 352}, {320, 216}}";
我刚才获取的就是UIKeyboardFrameEndUserInfoKey这个里面的值,是一个NSRect类型,主要是键盘的当前frame
最后,大家千万不要忘记在dealloc方法中移除通知
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillChangeFrameNotification object:nil];
//由于我用的是ARC,所以不需要[super dealloc]
}
iOS开发(5)动态监听键盘通知相关推荐
- ios 开发中 动态库 与静态库的区别
使用静态库的好处 1,模块化,分工合作 2,避免少量改动经常导致大量的重复编译连接 3,也可以重用,注意不是共享使用 动态库使用有如下好处: 1使用动态库,可以将最终可执行文件体积缩小 2使用动态库, ...
- IOS开发之----远程推送通知
原文地址:IOS开发之----远程推送通知作者:倒計時 玩了一年的iPhone了各种App的远程通知接收了不少,每次接收到的时候,就在反思,这丫的怎么实现的! 由于工作方面一直没有接触的机会,所以只好 ...
- ios 动态监听键盘输入法和高度
//监听键盘高度变化 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWasChan ...
- iOS一个方法实现监听键盘弹出、变化、收起事件
首先,自然是先监听键盘变化事件UIKeyboardWillChangeFrameNotification,代码如下: //使用NSNotificationCenter [[NSNotification ...
- (转)iOS开发资源:推送通知相关开源项目--PushSharp、APNS-PHP以及Pyapns等
PushSharp (github) PushSharp是一个实现了由服务器端向移动客户端推送消息的开源C#库,支持 iOS (iPhone/iPad APNS). Android (C2DM/GC ...
- iOS 开发之动态下载系统提供的多种中文字体
使用动态下载中文字体的API可以动态地向iOS系统中添加字体文件,这些字体文件都是下载到系统的目录中(目录是/private/var/mobile/Library/Assets/com_apple_M ...
- iOS开发之注册推送通知权限
1.首先在工程设置开启通知权限(Push Notifications开关打开) 2.注册通知权限,在此步骤会弹出用户授权提示 #import <UserNotifications/UserNot ...
- iOS开发:动态添加按钮
想要的效果是,单击一个已有的按钮后自动创建一个新的按钮,并为新按钮添加事件,使得单击时弹出提示框. 1.运行Xcode 4.2,新建一个Single View Application工程,取名Dyna ...
- iOS开发笔记 -- 动态切换APP的logo
1.618大促,看到天猫与京东的logo 也相应改变,所以查找资料 探究其实现方式. 2.实现的过程并不复杂,在此做个笔记,在今后的项目中可能会用到. 3.本篇笔记 demo 1.先看一下实现的效果. ...
最新文章
- 学习动力之“学习金字塔 (爱德加•戴尔)”理论
- 第18章:MYSQL分区
- java sql编码_java+sql 编码 UTF-8、ISO-8859-1、GBK
- sqlite学习笔记7:C语言中使用sqlite之打开数据库
- VLAN配置命令列表
- Python工程能力进阶、数学基础、经典机器学习模型实战、深度学习理论基础和模型调优技巧……胜任机器学习工程师岗位需要学习什么?...
- webapi------宿主程序
- php下载数据表,javascript – 如何使用php下载表数据作为excel表..?
- 8 个弱点助我成为更好的开发人员!
- Mysql常见的引擎
- 项目介绍star原理_这个Python项目厉害了!多个实战案例教你分析时空数据处理...
- 【MacOs系统-M2安装2022新版AWVS渗透工具】-保姆级安装教程
- linux免杀工具,kali 免杀工具shellter安装以及使用
- SIM900A—基础指令
- 马拉车算法(不懂问我)
- kali系统卸载Docker容器
- 使用Spring Cache设置缓存条件
- 吞云吐雾,美国电子烟问题,内附FDA的一个隐情
- 【JZOJ100209】【20190705】狂妄之人
- IP解析成地址 确定省市
热门文章
- 创建微服务架构的步骤_成功备战微服务的5个准备步骤
- dns设置服务器版本信息,DNS设置方法
- lookup函数和vlookup_LOOKUP函数与VLOOKUP函数,你总会喜欢一个的
- ERROR Shell: Failed to locate the winutils binary in the hadoop binary path java.io.IOException
- 英伟达官方免费课程!学用皮克斯USD框架,在主流3D仿真和协同应用中大显身手!...
- 成为年薪50W+的NLP工程师,需要哪些技能?
- 更深的编码器+更浅的解码器=更快的自回归模型
- 综述:基于GAN的图像翻译模型盘点
- CVPR 2019 | STGAN: 人脸高精度属性编辑模型
- 本周 AI 论文良心推荐,你想 pick 谁?