iOS开发中的键盘高度变化处理
2013-01-04 13:39
417 查看
IPAD键盘高度:
portrait 264 landscape 352.
iPhone键盘高度: Portrait 216 Landscape
140
NSNotificationCenter:键盘出现、消失时的通知
背景:
ios5之前,iphone上的键盘的高度是固定为216.0px高的,中文汉字的选择框是悬浮的,所以不少应用都将此高度来标注键盘的高度。
可是在ios5中,键盘布局变了,尤其是中文输入时,中文汉字选择框就固定在键盘上方,这样就使得原本与键盘紧密贴合的界面视图被中文汉字选择框给覆盖住了。一方面影响了界面的美观,另一方面,如果被覆盖的部分就是文本输入框的话,用户就无法看到输入的内容了。因此这个问题就必须得解决了。
解决方法:
其实在一开始使用216.0px这个固定值来标注键盘的高度就是错误的。因为在ios3.2以后的系统中,苹果就提供了键盘使用的api以及demo程序——“KeyboardAccessory”。
处理键盘事件的正确方法是这样的:(包括获取键盘的高度以及键盘弹出和消失动画的时间)
1)在要使用键盘的视图控制器中,接收键盘事件的通知:
2)然后添加键盘事件的处理代码:
获取到当前keyboard的高度以及动画时间,然后对视图进行对应的操作即可。
3)在视图控制器消除时,移除键盘事件的通知:
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。分割时键盘竟然是隐藏的。
分
portrait 264 landscape 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开发中的键盘高度变化处理
- iOS开发中的键盘高度变化处理
- iOS开发中的键盘高度变化处理
- iOS开发中的键盘高度变化处理
- ios开发 监听键盘frame变化事件获取键盘高度( ios8&ios7 横竖屏旋转时需要注意的问题)
- iOS开发之监听键盘高度的变化 分类: ios技术 2015-04-21 12:04 233人阅读 评论(0) 收藏
- iOS开发之监听键盘高度的变化
- iOS开发键盘高度的处理
- iOS开发之监听键盘高度的变化
- iOS开发之监听键盘高度的变化
- iOS开发之监听键盘高度的变化
- iOS开发第三方键盘处理实例代码
- iOS开发中的错误整理,再一次整理通过通知中心来处理键盘,一定记得最后关闭通知中心
- iOS中键盘高度处理
- iOS、Xcode监测键盘的显示和隐藏变化,并获得键盘高度,改变tableView的frame和偏移
- iOS开发小技巧--键盘处理以及解决block造成循环引用的小技巧
- iOS开发中如何在键盘弹出时改变View的高度
- iOS开发所有iPhone型号中所有键盘类型的高度
- iOS 中键盘上工具栏高度的变化