(二十四)监听键盘的通知和键盘弹出隐藏的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 ...
随机推荐
- jQuery 安装
网页中添加 jQuery 可以通过多种方法在网页中添加 jQuery. 您可以使用以下方法: 从 jquery.com 下载 jQuery 库 从 CDN 中载入 jQuery, 如从 Google ...
- Bootstrap3 排版-页面主体
Bootstrap 将全局 font-size 设置为 14px,line-height 设置为 1.428.这些属性直接赋予 元素和所有段落元素.另外,<p> (段落)元素还被设置了等于 ...
- MySQL注释中的sql也可能执行
MySql支持三种注释形式:# 和–属于单行注释,注释范围为该行的结尾:/* */注释属于多行注释,此外该种注释还可以实现行内注释.具体的使用情况如下图中所示(四种使用情形): 除此之外,/* */这 ...
- Scala:输入输出
http://blog.csdn.net/pipisorry/article/details/52902694 Scala基本输入输出 从屏幕上读取用户输入 有时候我们需要接收用户在屏幕输入的指令来处 ...
- Android Multimedia框架总结(二十三)MediaCodec补充及MediaMuxer引入(附案例)
请尊重分享成果,转载请注明出处,本文来自逆流的鱼yuiop,原文链接:http://blog.csdn.net/hejjunlin/article/details/53729575 前言:前面几章都是 ...
- Java异常封装(自己定义错误码和描述,附源码)
真正工作了才发现,Java里面的异常在真正工作中使用还是十分普遍的.什么时候该抛出什么异常,这个是必须知道的. 当然真正工作里面主动抛出的异常都是经过分装过的,自己可以定义错误码和异常描述. 下面小宝 ...
- EJB通过注解方式注入并使用其他EJB或者服务、配置JBoss数据源
通过注解方式注入并使用其他EJB或者服务 真实项目EJB对象很多,EJB之间也可以互相调用, 在项目HelloWorld下新建接口Other在cn.hqu.ejb3下: public interfac ...
- T-SQL动态查询(3)——静态SQL
接上文:T-SQL动态查询(2)--关键字查询 本文讲述关于静态SQL的一些知识和基础技巧. 简介: 什么是静态SQL?静态SQL是和动态SQL相对而言的,其实我们没必要过于纠结精确定义,只要大概 ...
- Android项目开发填坑记-Fragment的onBackPressed
Github版 CSDN版 知识背景 Fragment在当前的Android开发中,有两种引用方式,一个是 Android 3.0 时加入的,一个是supportV4包中的.这里简称为Fragment ...
- Android简易实战教程--第九话《短信备份~二》
这一篇,承接地八话.使用高效的方式备份短信--xml序列化器. 存储短信,要以对象的方式存储.首先创建javabean: package com.itydl.createxml.domain; pub ...