(二十四)监听键盘的通知和键盘弹出隐藏的View移动
让控制器监听键盘的通知,注意谁监听,谁的dealloc方法中就要remove,如果非ARC还要调用父类的dealloc方法。
//监听键盘的操作:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChangeFrame:) name:UIKeyboardWillChangeFrameNotification object:nil];
- (void)dealloc{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
- (void)keyboardWillChangeFrame:(NSNotification *)note{
NSLog(@"发送者%@ 内容%@",note.name,note.userInfo);
}
当键盘弹出时,接收到的内容为一个字典:需要注意的是其中的Key都有定义好的NSString,可以直接使用。
{
UIKeyboardAnimationCurveUserInfoKey = 7; //动画的执行节奏
UIKeyboardAnimationDurationUserInfoKey = "0.25"; //动画时长
UIKeyboardBoundsUserInfoKey = "NSRect: {{0, 0}, {320, 224}}";
UIKeyboardCenterBeginUserInfoKey = "NSPoint: {160, 592}";
UIKeyboardCenterEndUserInfoKey = "NSPoint: {160, 368}";
UIKeyboardFrameBeginUserInfoKey = "NSRect: {{0, 480}, {320, 224}}"; //键盘的起始位置、尺寸
UIKeyboardFrameEndUserInfoKey = "NSRect: {{0, 256}, {320, 224}}"; //键盘的结束位置、尺寸
}
键盘退出的动作:滑动tableView实现键盘退出:
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
//退出键盘
[self.view endEditing:YES];
}
键盘动作时整个View跟着键盘走:
一个细节:由于字典中存放的都是对象,因此字典里的CGRect是封装以后的,用CGRectValue方法解开才是CGRect。
//注意,字典里存放的都是对象,要把对象转为CGRect结构体,使用CGRectValue方法。
CGRect InfoKey = [userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
View随键盘移动的方法实现:注意对象向结构体的解包操作,注意note的成员,有userInfo和Object,二者是分开的。这样设计的视图还会随着键盘的尺寸实时变化。
细节:使用Transform可以方便的实现视图的移动。
- (void)keyboardWillChangeFrame:(NSNotification *)note{
//注意,字典里存放的都是对象,要把对象转为CGRect结构体,使用CGRectValue方法。
CGRect keyboardFrame = [note.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
CGFloat duration = [note.userInfo[UIKeyboardAnimationDurationUserInfoKey] floatValue];
CGFloat offsetY = keyboardFrame.origin.y - self.view.frame.size.height;
[UIView animateWithDuration:duration animations:^{
self.view.transform = CGAffineTransformMakeTranslation(0, offsetY);
}];
}
不够协调的时候会看到黑色的原因:
视图控制器在创建时在最底层会有一个Window,默认为黑色。
解决办法之一是改变window的颜色。
AppDelegate中声明了window。
也可以直接在控制器里面改:self.view.window.backgroundColor可以设置窗口颜色,最好和TableView同色。
(二十四)监听键盘的通知和键盘弹出隐藏的View移动的更多相关文章
- IOS 监听键盘的通知(NSNotificationCenter)
通知方法: /** * 当键盘改变了frame(位置和尺寸)的时候调用 */ - (void)keyboardWillChangeFrame:(NSNotification *)note { // 设 ...
- Bootstrap<基础二十四> 缩略图
Bootstrap 缩略图.大多数站点都需要在网格中布局图像.视频.文本等.Bootstrap 通过缩略图为此提供了一种简便的方式.使用 Bootstrap 创建缩略图的步骤如下: 在图像周围添加带有 ...
- 二十四、Struts2中的UI标签
二十四.Struts2中的UI标签 Struts2中UI标签的优势: 数据回显 页面布局和排版(Freemark),struts2提供了一些常用的排版(主题:xhtml默认 simple ajax) ...
- WCF技术剖析之二十四: ServiceDebugBehavior服务行为是如何实现异常的传播的?
原文:WCF技术剖析之二十四: ServiceDebugBehavior服务行为是如何实现异常的传播的? 服务端只有抛出FaultException异常才能被正常地序列化成Fault消息,并实现向客户 ...
- VMware vSphere 服务器虚拟化之二十四 桌面虚拟化之手动池管理物理机
VMware vSphere 服务器虚拟化之二十四 桌面虚拟化之手动池管理物理机 VMwareView手动池可以管理物理计算机 说明: 环境基于实验二十三 1.准备一台Windows 7的物理计算机名 ...
- Bootstrap入门(二十四)data属性
Bootstrap入门(二十四)data属性 你可以仅仅通过 data 属性 API 就能使用所有的 Bootstrap 插件,无需写一行 JavaScript 代码.这是 Bootstrap 中的一 ...
- 3360: [Usaco2004 Jan]算二十四
3360: [Usaco2004 Jan]算二十四 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 6 Solved: 6[Submit][Statu ...
- JAVA之旅(二十四)——I/O流,字符流,FileWriter,IOException,文件续写,FileReader,小练习
JAVA之旅(二十四)--I/O流,字符流,FileWriter,IOException,文件续写,FileReader,小练习 JAVA之旅林林总总也是写了二十多篇了,我们今天终于是接触到了I/O了 ...
- 二十四. Python基础(24)--封装
二十四. Python基础(24)--封装 ● 知识结构 ● 类属性和__slots__属性 class Student(object): grade = 3 # 也可以写在__slots ...
随机推荐
- iOS开发基础之设置状态栏和二维码的unspported type found 问题
最近遇到设置状态栏和二维码AVCaptureMetadataOutput setMetadataObjectTypes: unspported type found的错误问题,所以我在这里进行总结一下 ...
- [Gradle系列]Gradle发布module库到jCenter, 并构建自己的企业Maven私服
Tamic 作者: http://blog.csdn.net/sk719887916/article/details/53224544 前言 andorid开发者经常会看到xx公司发布了xx项目,xx ...
- C算法实现:将字符串中的数字返回为整型数
今天看linux内核驱动的代码,发现一个算法写得挺简单,也有意思. 分享一下我的测试代码: #include <stdio.h> typedef int U32 ; U32 String2 ...
- [ExtJS5学习笔记]第三十三节 sencha extjs 5 grid表格导出excel
使用extjs肯定少不了使用表格控件,用到表格,领导们(一般)还是惯于使用excel看数据,所以用到extjs表格的技术猿们肯定也会有导出表格excel这一个需求,本文主要针对如何在用extjs将gr ...
- EJB开发第一个无状态会话bean、开发EJB客户端
开发第一个无状态会话bean EJB中的三中bean: 会话Bean(Session Bean) 负责与客户端交互,是编写业务逻辑的地方,在会话bean中可以通过JDBC直接操作数据库,但大多数情况下 ...
- 使用 纯JQuery 进行 表单 验证
对于JavaScript而言,进行表单数据的验证可谓是很有必要的,而且一般我们都会在网页上先进行一下表单验证,然后服务器端再次进行验证,来确保用户提交数据的准确性.下面就来分享一个JQuery实现的表 ...
- SQL 数据库语言分析总结(一)
SQL语言是被广泛采用的数据库的学习语言,之前在本科的时候已经学习过了,但是后来又忘记了,所以这次简单的总结一下. 分类 交互式sql语言,交互式语言主要是利用一些数据库工具,比如mysql的终端工具 ...
- Spark集群术语
Spark集群术语解析 1. Application Application是用户在Spark上构建(编写)的程序,包含driver program 和executors(分布在集群中多个节点上运行的 ...
- spring源码系列(一)sring源码编译 spring源码下载 spring源码阅读
想对spring框架进行深入的学习一下,看看源代码,提升和沉淀下自己,工欲善其事必先利其器,还是先搭建环境吧. 环境搭建 sping源码之前是svn管理,现在已经迁移到了github中了,新版本基于g ...
- 01基于配置文件方式的SpringMVC,三种HandlerMapping,三种控制器
1 添加Spring MVC所需的jar包. 2 创建一个以下项目结构的springmvc项目 3 web.xml的配置如下: <?xmlversion="1.0"en ...