在
iOS5
上请求显示键盘时,系统从屏幕底部将键盘滑入上来,位于应用的内容之上。
(墙内:http://mikixiyou.iteye.com/blog/1488302)
如果屏幕中的内容项目比较多,它就可能覆盖住文本输入框之类的对象。你必须调整你的内容,使得输入框保持可见。
你会想到哪些处理方法呢?
第一种,
临时调整窗口中各个视图的大小,使得键盘从下向上占领的区域空白。键盘的高度(
keyboard.size.height
)是一定的,将视图中所有内容所在区域的
y
值减小到
y-keyboard.size.height
。
该方法有个局限,如果所有内容之和大于窗口减去键盘高度的话,该方法将不能用。
第二种,
将窗口中所有视图嵌入进一个滚动视图对象(
UIScrollView
)中。在键盘出现时,你将输入框滚动到合适的位置,调整一下滚动视图的内容区域。
这些操作通过一个通知
UIKeyboardDidShowNotification
去实现的,逻辑过程如下:
1
、根据通知的字典信息
userInfo
得到键盘的
size
。
2
、根据键盘的
size
中的
height
值,调整滚动视图内容底部的
inset
。
3
、滚动目标视图即文件输入框进入视图中。
简要的代码如下:
1
、实现两个委托方法,用于指定输入框对象。
-
(void)textFieldDidBeginEditing:(UITextField *)textField
|
{
|
activeField = textField;
|
}
|
|
- (void)textFieldDidEndEditing:(UITextField
*)textField
|
{
|
activeField = nil;
|
}
|
2
、注册通知的观察者
- (void)registerForKeyboardNotifications
|
{
|
[[NSNotificationCenter defaultCenter] addObserver:self
|
selector:@selector(keyboardWasShown:)
|
name:UIKeyboardDidShowNotification object:nil];
|
|
[[NSNotificationCenter defaultCenter] addObserver:self
|
selector:@selector(keyboardWillBeHidden:)
|
name:UIKeyboardWillHideNotification object:nil];
|
|
}
|
将这个方法放在
viewDidAppear
中调用。
同时也要写一个
removeObserver
放在
viewWillDisappear
中调用。
3
、实现键盘显示通知的
selector
中的方法
// Called when the
UIKeyboardDidShowNotification is sent.
|
-
(void)keyboardWasShown:(NSNotification*)aNotification
|
{
|
NSDictionary* info = [aNotification userInfo];
|
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey]
CGRectValue].size;
|
|
UIEdgeInsets
contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height, 0.0);
|
scrollView.contentInset = contentInsets;
|
scrollView.scrollIndicatorInsets = contentInsets;
|
|
// If active text field is hidden by keyboard, scroll it so it's
visible
|
// Your application might not need or want this behavior.
|
CGRect aRect = self.view.frame;
|
aRect.size.height -= kbSize.height;
|
if (!CGRectContainsPoint(aRect, activeField.frame.origin) ) {
|
CGPoint scrollPoint = CGPointMake(0.0,
activeField.frame.origin.y-kbSize.height);
|
[scrollView setContentOffset:scrollPoint animated:YES];
|
}
|
}
|
4
、实现键盘消失通知的方法
// Called when the
UIKeyboardWillHideNotification is sent
|
-
(void)keyboardWillBeHidden:(NSNotification*)aNotification
|
{
|
UIEdgeInsets contentInsets = UIEdgeInsetsZero;
|
scrollView.contentInset = contentInsets;
|
scrollView.scrollIndicatorInsets
= contentInsets;
|
}
|
这个方法调整内容底部的
inset
的值使得输入框不被键盘区域屏蔽的。还可以换种方法实现。
第三种,
扩展内容视图的高度,滚动文本输入框对象进内容视图。
将
keyboardWasShown:
重写。
-
(void)keyboardWasShown:(NSNotification*)aNotification {
|
NSDictionary*
info = [aNotification userInfo];
|
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey]
CGRectValue].size;
|
CGRect bkgndRect = activeField.superview.frame;
|
bkgndRect.size.height += kbSize.height;
|
[activeField.superview
setFrame:bkgndRect];
|
[scrollView setContentOffset:CGPointMake(0.0,
activeField.frame.origin.y-kbSize.height) animated:YES];
|
}
|
分享到:
相关推荐
监听键盘不覆盖输入框
UITextField或者UITextView放在UIScrollView上弹出键盘修改UIScrollView上移。 还是有点小小的不完美,并不影响整体使用
我们在开发app时界面中经常会有输入框,例如用户登陆界面,一般都是UITextField,当我们点击输入框时会弹出系统键盘,这时如果不调整系统输入框,输入框可能会被键盘覆盖,这种用户体验很不友好,所以这时我们应该让...
ios如何解决布局太长导致部分不显示,且解决键盘覆盖文本框的问题。
写的一个键盘覆盖输入框的解决办法,大家一起学习;
IQKeyboardManager可以防止滑动键盘在弹出的时候覆盖一个文本字段,可以任何时候关闭键盘,进入下一个输入框,或者上一个输入框,超级方便。更重要的是,全程不需要你输入任何代码。使用IQKeyboardManager您只需添加...
四个TextView给textview一个下边框,.用一个透明的EditText覆盖在四个TextView上实现验证码输入,监听输入完成,实现一个个输入
LEEAlert-优雅的Alert ActionSheet 演示 特性 链式语法结构优雅 支持alert类型与...支持级别和优先级多个同时显示时根据优先级的顺序依次添加到其的如被优先级覆盖。 支持两种背景样式1.半透明(支持自定义预设
据字符串的多少,动态调整UILabel的宽度或高度ios 将字符串转换为日期时间格式ios获取时间和星期(注意week1是星期天)隐藏状态栏屏幕变动检测设置视图背景图片键盘覆盖输入框将plist文件中的数据赋给数组手指的触摸从...
使用和选项的屏幕截图。 预定义的样式和一些选项可以在进行测试。 角度日期选择器和日期范围选择... 输入框和输入框控件( 引导程序4和超棒的字体示例) 50个选择动态更改任何选项的值 经过良好测试 覆盖率报告 大多