众所周知,在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)动态监听键盘通知相关推荐

  1. ios 开发中 动态库 与静态库的区别

    使用静态库的好处 1,模块化,分工合作 2,避免少量改动经常导致大量的重复编译连接 3,也可以重用,注意不是共享使用 动态库使用有如下好处: 1使用动态库,可以将最终可执行文件体积缩小 2使用动态库, ...

  2. IOS开发之----远程推送通知

    原文地址:IOS开发之----远程推送通知作者:倒計時 玩了一年的iPhone了各种App的远程通知接收了不少,每次接收到的时候,就在反思,这丫的怎么实现的! 由于工作方面一直没有接触的机会,所以只好 ...

  3. ios 动态监听键盘输入法和高度

    //监听键盘高度变化 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWasChan ...

  4. iOS一个方法实现监听键盘弹出、变化、收起事件

    首先,自然是先监听键盘变化事件UIKeyboardWillChangeFrameNotification,代码如下: //使用NSNotificationCenter [[NSNotification ...

  5. (转)iOS开发资源:推送通知相关开源项目--PushSharp、APNS-PHP以及Pyapns等

    PushSharp  (github) PushSharp是一个实现了由服务器端向移动客户端推送消息的开源C#库,支持 iOS (iPhone/iPad APNS). Android (C2DM/GC ...

  6. iOS 开发之动态下载系统提供的多种中文字体

    使用动态下载中文字体的API可以动态地向iOS系统中添加字体文件,这些字体文件都是下载到系统的目录中(目录是/private/var/mobile/Library/Assets/com_apple_M ...

  7. iOS开发之注册推送通知权限

    1.首先在工程设置开启通知权限(Push Notifications开关打开) 2.注册通知权限,在此步骤会弹出用户授权提示 #import <UserNotifications/UserNot ...

  8. iOS开发:动态添加按钮

    想要的效果是,单击一个已有的按钮后自动创建一个新的按钮,并为新按钮添加事件,使得单击时弹出提示框. 1.运行Xcode 4.2,新建一个Single View Application工程,取名Dyna ...

  9. iOS开发笔记 -- 动态切换APP的logo

    1.618大促,看到天猫与京东的logo 也相应改变,所以查找资料 探究其实现方式. 2.实现的过程并不复杂,在此做个笔记,在今后的项目中可能会用到. 3.本篇笔记 demo 1.先看一下实现的效果. ...

最新文章

  1. 学习动力之“学习金字塔 (爱德加•戴尔)”理论
  2. 第18章:MYSQL分区
  3. java sql编码_java+sql 编码 UTF-8、ISO-8859-1、GBK
  4. sqlite学习笔记7:C语言中使用sqlite之打开数据库
  5. VLAN配置命令列表
  6. Python工程能力进阶、数学基础、经典机器学习模型实战、深度学习理论基础和模型调优技巧……胜任机器学习工程师岗位需要学习什么?...
  7. webapi------宿主程序
  8. php下载数据表,javascript – 如何使用php下载表数据作为excel表..?
  9. 8 个弱点助我成为更好的开发人员!
  10. Mysql常见的引擎
  11. 项目介绍star原理_这个Python项目厉害了!多个实战案例教你分析时空数据处理...
  12. 【MacOs系统-M2安装2022新版AWVS渗透工具】-保姆级安装教程
  13. linux免杀工具,kali 免杀工具shellter安装以及使用
  14. SIM900A—基础指令
  15. 马拉车算法(不懂问我)
  16. kali系统卸载Docker容器
  17. 使用Spring Cache设置缓存条件
  18. 吞云吐雾,美国电子烟问题,内附FDA的一个隐情
  19. 【JZOJ100209】【20190705】狂妄之人
  20. IP解析成地址 确定省市

热门文章

  1. 创建微服务架构的步骤_成功备战微服务的5个准备步骤
  2. dns设置服务器版本信息,DNS设置方法
  3. lookup函数和vlookup_LOOKUP函数与VLOOKUP函数,你总会喜欢一个的
  4. ERROR Shell: Failed to locate the winutils binary in the hadoop binary path java.io.IOException
  5. 英伟达官方免费课程!学用皮克斯USD框架,在主流3D仿真和协同应用中大显身手!...
  6. 成为年薪50W+的NLP工程师,需要哪些技能?
  7. 更深的编码器+更浅的解码器=更快的自回归模型
  8. 综述:基于GAN的图像翻译模型盘点
  9. CVPR 2019 | STGAN: 人脸高精度属性编辑模型
  10. 本周 AI 论文良心推荐,你想 pick 谁?