`
yidongkaifa
  • 浏览: 4050777 次
文章分类
社区版块
存档分类
最新评论

iOS开发中的键盘高度变化处理

 
阅读更多

IPAD键盘高度:

portrait 264landscape 352.

iPhone键盘高度:Portrait 216 Landscape 140

NSNotificationCenter:键盘出现、消失时的通知

UIKeyboardWillShowNotification;
UIKeyboardDidShowNotification; 
UIKeyboardWillHideNotification; 
UIKeyboardDidHideNotification;

背景:

  ios5之前,iphone上的键盘的高度是固定为216.0px高的,中文汉字的选择框是悬浮的,所以不少应用都将此高度来标注键盘的高度。

  可是在ios5中,键盘布局变了,尤其是中文输入时,中文汉字选择框就固定在键盘上方,这样就使得原本与键盘紧密贴合的界面视图被中文汉字选择框给覆盖住了。一方面影响了界面的美观,另一方面,如果被覆盖的部分就是文本输入框的话,用户就无法看到输入的内容了。因此这个问题就必须得解决了。

解决方法:

  其实在一开始使用216.0px这个固定值来标注键盘的高度就是错误的。因为在ios3.2以后的系统中,苹果就提供了键盘使用的api以及demo程序——“KeyboardAccessory”。

  处理键盘事件的正确方法是这样的:(包括获取键盘的高度以及键盘弹出和消失动画的时间)

  1)在要使用键盘的视图控制器中,接收键盘事件的通知:

复制代码
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];

// 键盘高度变化通知,ios5.0新增的
#ifdef __IPHONE_5_0
float version = [[[UIDevice currentDevice] systemVersion] floatValue];
if (version >= 5.0) {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillChangeFrameNotification object:nil];
}
#endif
复制代码


  2)然后添加键盘事件的处理代码:

    获取到当前keyboard的高度以及动画时间,然后对视图进行对应的操作即可。

复制代码
#pragma mark -
#pragma mark Responding to keyboard events
- (void)keyboardWillShow:(NSNotification *)notification {
/*
Reduce the size of the text view so that it's not obscured by the keyboard.
Animate the resize so that it's in sync with the appearance of the keyboard.
*/
NSDictionary *userInfo = [notification userInfo];
// Get the origin of the keyboard when it's displayed.
NSValue* aValue = [userInfo objectForKey:UIKeyboardFrameEndUserInfoKey];
// Get the top of the keyboard as the y coordinate of its origin in self's view's coordinate system. The bottom of the text view's frame should align with the top of the keyboard's final position.
CGRect keyboardRect = [aValue CGRectValue];
// Get the duration of the animation.
NSValue *animationDurationValue = [userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey];
NSTimeInterval animationDuration;
[animationDurationValue getValue:&animationDuration];
// Animate the resize of the text view's frame in sync with the keyboard's appearance.
[self moveInputBarWithKeyboardHeight:keyboardRect.size.height withDuration:animationDuration];
} - (void)keyboardWillHide:(NSNotification *)notification {
NSDictionary* userInfo = [notification userInfo];
/*
Restore the size of the text view (fill self's view).
Animate the resize so that it's in sync with the disappearance of the keyboard.
*/
NSValue *animationDurationValue = [userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey];
NSTimeInterval animationDuration;
[animationDurationValue getValue:&animationDuration];
[self moveInputBarWithKeyboardHeight:0.0 withDuration:animationDuration];
}
复制代码

  3)在视图控制器消除时,移除键盘事件的通知:

[[NSNotificationCenter defaultCenter] removeObserver:self];


ps:

  ios5隐藏功能分享——“字典”功能(英英字典):

  在任何输入框中选中一个英文单词,此时会有选择项“复制”,“删除”...等,还有一个向右的箭头,点击这个向右的箭头后,就会出现“定义”选项,点击这个“定义”按钮即会弹出这个英语单词的英文解释。


// ----------------------

iOS开始时经常会在键盘显示时调整界面布局,iOS 5中当切换为中文输入法时,键盘高度会增加,同时给iPad的键盘增加了分割功能,使得键盘处理情况更加多样化。键盘的消息通知有:

通知描述UIKeyboardWillShowNotification键盘即将显示UIKeyboardDidShowNotification键盘已经显示UIKeyboardWillHideNotification键盘即将隐藏UIKeyboardDidHideNotification键盘已经隐藏UIKeyboardWillChangeFrameNotification键盘frame即将改变UIKeyboardDidChangeFrameNotification键盘frame已经改变

在开发中其实这些通知并不能按照你所想的那样发生,要注意以下几点:

1. 当在英文和中文输入法之间切换时,iPhone中并不会产生UIKeyboardWillChangeFrameNotification和UIKeyboardDidChangeFrameNotification通知,而iPad中会产生。
2. ChangeFrame Notification会发生在Show或Hide Notification之前。
3. 在iPad中分割键盘会有Hide Notification,合并键盘时才有Show Notification。分割时键盘竟然是隐藏的。

分享到:
评论

相关推荐

    iOS开发数字键盘,定制键盘

    ios开发中定制个性键盘,数字键盘 定制return按钮,银行卡密码键盘 很有用

    ios 开发关闭键盘

    在 iOS 程序中当想要在文本框中输入数据,轻触文本框会打开键盘。对于 iPad 程序,其键盘有一个按钮可以用来关闭键盘,但是 iPhone 程序中的键盘却没有这样的按钮,不过我们可以采取一些方法关闭它。例如,我们可以...

    ios-监听键盘高度(包括第三发键盘).zip

    已封装成NSObject的分类

    弹出键盘,监听键盘高度

    在我们开发中,经常用到评论等功能,在下方一个TextField,但是弹出键盘,评论框也要弹起,这时候要监听高度,本代码可完美实现此功能

    iOS_输入栏自适应键盘的高度

    通过注册两个通知,可以监控键盘的弹出和消失,可以动态计算出键盘的高度。

    ios 类似于即时聊天界面的输入发送TextField工具条,可以随键盘的显示和输入法切换导致的键盘高度变化而自动变化TextField的位置。

    类似于即时聊天界面的输入发送TextField工具条,可以随键盘的显示和输入法切换导致的键盘高度变化而自动变化TextField的位置。

    iOS屏幕根据键盘自动变化高度

    主要为大家详细介绍了iOS屏幕根据键盘自动变化高度,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    IOS聊天软键盘处理

    最近做ios开发,做聊天界面是遇到了软键盘隐藏和显示问题,还有中英文切换也要调整整体的高度,真心的蛋疼,研究了几天,总算解决啦,不敢独享,所以分享一下,欢迎但牛指点一二。

    iOS开发进阶-唐巧.pdf

    第一部分介绍iOS 开发的常用工具,第二部分介绍iOS开发中的一些常见的实践经验,第三部分介绍iOS 开发中涉及的原理。 如果把成为iOS 开发高手的过程比作武侠小说中的修炼过程的话,工具、实践和理论的学习就分别对应...

    IOS开发官方教程(中文)

    开发 iOS 应用程序,您需要: Mac 电脑,运行 OS X 10.8 (Mountain Lion) 或更高版本 Xcode iOS SDK Xcode 是 Apple 的集成开发环境 (IDE)。Xcode 包括源代码编辑器、图形用户界面编辑器和许多其他功 能。iOS SDK 扩展...

    iOS 自定义输入键盘

    iOS 自定义输入键盘

    ios 支付自定义数字键盘

    ios 自定义数字键盘,使用objective-c 开发,适用自定义支付键盘,其他基本功能均可在此基础上进行扩展,如自定义键盘背景图等等;内附使用说明

    【iOS开发源码系列】图像处理源代码

    资源名称:【iOS开发源码系列】图像处理源代码资源目录:【】【iOS图像】360-Degree-Panorama-master【】【iOS图像】AGMedallionView-master【】【iOS图像】AGSimpleImageEditorView-master【】【iOS图像】...

    iOS开发进阶-完整版

    唐巧的《iOS开发进阶》,希望对一些初级的程序员有用

    IOS自定义随机键盘

    和IOS原生键盘基本一致,可以自定义键盘上的文字,对于一些什么偏远地区的语言IOS原来没有的,可以自定义文字。另外加了键盘的随机分布,只需要在初始化的时候设置isRandomKeyBoard属性,即可每次触发键盘时,键盘...

    ios-键盘高度自适应.zip

    简单调用 导入文件 AppDelegate 实例化 ,在需要的类中实例化几句代码几个 重点在导入。

    iOS开发视频教程

    资源名称:iOS开发视频教程资源目录:【】iOS开发视频教程-第01讲-iOS历史介绍【】iOS开发视频教程-第02讲-XCode安装【】iOS开发视频教程-第03讲-UIView_PPT【】iOS开发视频教程-第04讲-UILabel【】iOS开发视频教程-...

    jQuery苹果IOS虚拟键盘

    jQuery苹果IOS虚拟键盘基于jquery.1.11.3.min.js制作,有全功能键盘、数字键盘两种形式。

    《iOS开发零基础入门教程》(40集)

    资源名称:《iOS开发零基础入门教程》(40集)资源目录:【】传智播客《iOS开发零基础入门教程》1.1【】传智播客《iOS开发零基础入门教程》1.2【】传智播客《iOS开发零基础入门教程》1.3【】传智播客《iOS开发零基础...

    高效的图片轮播_IOS开发_高度封装

    高效的图片轮播_IOS开发_高度封装

Global site tag (gtag.js) - Google Analytics