在
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];
|
}
|
分享到:
相关推荐
标题"ios-键盘不覆盖UITextField和UITextView输入框.zip"所提及的问题正是针对这一常见场景,即如何在键盘弹出时避免遮挡输入框,保持良好的用户体验。描述中提到的解决方案虽有“小小的不完美”,但整体上是可行的...
"ios-监听键盘不覆盖输入框.zip"中的示例可能包含了处理这种情况的代码实现,如`textfieldKeyboardFit`文件。 首先,我们需要导入必要的框架,如UIKit,它包含了UITextField、UITextView和UIKeyboard的相关类: ``...
1. **调整输入框的位置**:通过监听键盘显示和隐藏的通知,如`UIKeyboardWillShowNotification`和`UIKeyboardWillHideNotification`,动态地修改输入框的frame,使其在键盘出现时上移,键盘消失时恢复原位。...
在Android应用开发中,经常会遇到一个问题,即当用户在输入框中输入时,弹出的软键盘会遮挡部分屏幕内容,尤其是对于登录或注册等需要填写多项信息的界面,这种情况严重影响了用户体验。为了解决这个问题,Android...
2. **自动调整输入视图(inputAccessoryView)**:为需要输入的文本框设置一个inputAccessoryView,比如一个工具栏,当键盘出现时,这个工具栏会随键盘一起升起,保持与文本框的距离。 3. **手动调整布局**:在键盘...
我们在开发app时界面中经常会有输入框,例如用户登陆界面,一般都是UITextField,当我们点击输入框时会弹出系统键盘,这时如果不调整系统输入框,输入框可能会被键盘覆盖,这种用户体验很不友好,所以这时我们应该让...
在iOS开发中,当用户在使用输入框时,弹出的虚拟键盘经常会出现遮挡输入框的情况,这会给用户带来不便,影响用户体验。这个“ios-Keyboard键盘覆盖问题.zip”压缩包提供了解决这一问题的方法,让我们来深入探讨一下...
在iOS开发中,虚拟键盘(UIKeyboard)是用户与输入框进行交互的重要组成部分。有时,开发者可能需要在虚拟键盘上添加自定义的功能按钮,以增强用户体验或者实现特定业务需求。这个话题,"iOS虚拟键盘上添加动态按钮...
在iOS开发中,一个常见的问题是在用户操作键盘时,输入框可能会被键盘遮挡,这给用户体验带来了一定的困扰。"ios-局部监听键盘再也不会挡住输入框.zip"这个压缩包提供了一个解决方案,它源自GitHub上的开源项目——...
然而,由于屏幕空间有限,尤其是对于iPhone设备,键盘的出现会覆盖一部分屏幕内容,这可能使UITextField变得不可见。为了解决这个问题,开发者可以采取以下几种策略: 1. 使用`UIKeyboardWillShowNotification`和`...
IQKeyboardManager可以防止滑动键盘在弹出的时候覆盖一个文本字段,可以任何时候关闭键盘,进入下一个输入框,或者上一个输入框,超级方便。更重要的是,全程不需要你输入任何代码。使用IQKeyboardManager您只需添加...
在Flutter混合开发中,经常会遇到一个困扰开发者的问题,即当用户在输入框中输入时,软键盘弹出导致底部的输入框被遮挡。这个问题在Android平台上尤为常见,因为Android系统的键盘处理机制与iOS有所不同。本文将详细...
这两个方法分别会在用户开始编辑文本和结束编辑时被调用。 ```objc // 当用户开始编辑时,键盘弹出,屏幕上移 - (void)textFieldDidBeginEditing:(UITextField *)textField { // 键盘高度通常为216像素,但也可以...
在iOS应用开发中,用户与屏幕上的输入框交互时,会触发虚拟键盘的弹出。然而,有时我们希望提供更加友好的用户体验,让用户能够轻松地关闭键盘,而不仅仅是通过输入框的return键。以下是五种在iOS中关闭或退出键盘的...
1. 使用UIScrollView:如果你的视图包含多个输入框并被放置在一个UIScrollView内,你可以设置scroll view的contentInset和scrollIndicatorInsets,使其在键盘出现时自动调整,使输入框保持可见。此外,...
在iOS平台上,开发移动应用时,常常会遇到与`input`元素相关的问题,特别是当用户在`input`框中输入时弹出软键盘,会导致页面布局出现一些意料之外的变化。这个问题主要涉及到`fixed`定位的失效,这通常是由于苹果...
通常,"小方块输入框"是通过自定义视图(Custom View)来创建的,这需要开发者具备扎实的Android或iOS平台上的UI开发基础。在Android中,我们可以继承自`View`类或者使用`TextInputLayout`等现有组件进行扩展,而在...
Swift-SXTextView是一个专门解决TextView在用户输入时被键盘遮挡问题的解决方案,它确保了用户可以无限输入而不受键盘的影响。这个项目利用了第三方库IQKeyboardManager以及Masonry来实现这一功能,下面我们将深入...
为了提供良好的交互体验,开发者需要能够动态调整TextView的高度,使其不被键盘覆盖。这篇博客"动态调整textView的高度,不被keyboard遮盖"正是探讨了这个问题的解决方案。 首先,我们要理解为什么TextView会被键盘...
在iOS平台上,自定义键盘(通常称为第三方键盘)允许开发者为用户提供独特的输入体验。本教程将深入探讨如何使用Objective-C创建一个自定义键盘,通过分析标题"SelfDefineKeyboard:iOS自定义键盘demo"和描述中的内容...