`
mikixiyou
  • 浏览: 1100696 次
  • 性别: Icon_minigender_1
  • 来自: 南京
博客专栏
C3c8d188-c0ab-3396-821d-b68331e21226
Oracle管理和开发
浏览量:353691
社区版块
存档分类
最新评论

如何保持iOS上键盘出现时输入框不被覆盖

    博客分类:
  • iOS
阅读更多

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-键盘不覆盖UITextField和UITextView输入框.zip"所提及的问题正是针对这一常见场景,即如何在键盘弹出时避免遮挡输入框,保持良好的用户体验。描述中提到的解决方案虽有“小小的不完美”,但整体上是可行的...

    ios-监听键盘不覆盖输入框.zip

    "ios-监听键盘不覆盖输入框.zip"中的示例可能包含了处理这种情况的代码实现,如`textfieldKeyboardFit`文件。 首先,我们需要导入必要的框架,如UIKit,它包含了UITextField、UITextView和UIKeyboard的相关类: ``...

    ios-键盘遮挡输入框处理.zip

    1. **调整输入框的位置**:通过监听键盘显示和隐藏的通知,如`UIKeyboardWillShowNotification`和`UIKeyboardWillHideNotification`,动态地修改输入框的frame,使其在键盘出现时上移,键盘消失时恢复原位。...

    5种方法完美解决android软键盘挡住输入框方法详解

    在Android应用开发中,经常会遇到一个问题,即当用户在输入框中输入时,弹出的软键盘会遮挡部分屏幕内容,尤其是对于登录或注册等需要填写多项信息的界面,这种情况严重影响了用户体验。为了解决这个问题,Android...

    ios如何解决布局太长导致部分不显示,且解决键盘覆盖文本框的问题。

    2. **自动调整输入视图(inputAccessoryView)**:为需要输入的文本框设置一个inputAccessoryView,比如一个工具栏,当键盘出现时,这个工具栏会随键盘一起升起,保持与文本框的距离。 3. **手动调整布局**:在键盘...

    ios-UITextField输入框随着系统键盘升降自适应调整坐标.zip

    我们在开发app时界面中经常会有输入框,例如用户登陆界面,一般都是UITextField,当我们点击输入框时会弹出系统键盘,这时如果不调整系统输入框,输入框可能会被键盘覆盖,这种用户体验很不友好,所以这时我们应该让...

    ios-Keyboard键盘覆盖问题.zip

    在iOS开发中,当用户在使用输入框时,弹出的虚拟键盘经常会出现遮挡输入框的情况,这会给用户带来不便,影响用户体验。这个“ios-Keyboard键盘覆盖问题.zip”压缩包提供了解决这一问题的方法,让我们来深入探讨一下...

    iOS虚拟键盘上添加动态按钮

    在iOS开发中,虚拟键盘(UIKeyboard)是用户与输入框进行交互的重要组成部分。有时,开发者可能需要在虚拟键盘上添加自定义的功能按钮,以增强用户体验或者实现特定业务需求。这个话题,"iOS虚拟键盘上添加动态按钮...

    ios-局部监听键盘再也不会挡住输入框.zip

    在iOS开发中,一个常见的问题是在用户操作键盘时,输入框可能会被键盘遮挡,这给用户体验带来了一定的困扰。"ios-局部监听键盘再也不会挡住输入框.zip"这个压缩包提供了一个解决方案,它源自GitHub上的开源项目——...

    ios7隐藏虚拟键盘,解决键盘挡住UITextField问题

    然而,由于屏幕空间有限,尤其是对于iPhone设备,键盘的出现会覆盖一部分屏幕内容,这可能使UITextField变得不可见。为了解决这个问题,开发者可以采取以下几种策略: 1. 使用`UIKeyboardWillShowNotification`和`...

    ios开发 键盘管理,关闭键盘,隐藏键盘,键盘挡住编辑区域时上移编辑区域

    IQKeyboardManager可以防止滑动键盘在弹出的时候覆盖一个文本字段,可以任何时候关闭键盘,进入下一个输入框,或者上一个输入框,超级方便。更重要的是,全程不需要你输入任何代码。使用IQKeyboardManager您只需添加...

    flutter混合开发解决输入框被键盘遮挡的问题

    在Flutter混合开发中,经常会遇到一个困扰开发者的问题,即当用户在输入框中输入时,软键盘弹出导致底部的输入框被遮挡。这个问题在Android平台上尤为常见,因为Android系统的键盘处理机制与iOS有所不同。本文将详细...

    IOS开发中键盘输入屏幕上移的解决方法

    这两个方法分别会在用户开始编辑文本和结束编辑时被调用。 ```objc // 当用户开始编辑时,键盘弹出,屏幕上移 - (void)textFieldDidBeginEditing:(UITextField *)textField { // 键盘高度通常为216像素,但也可以...

    iOS中input框问题

    在iOS平台上,开发移动应用时,常常会遇到与`input`元素相关的问题,特别是当用户在`input`框中输入时弹出软键盘,会导致页面布局出现一些意料之外的变化。这个问题主要涉及到`fixed`定位的失效,这通常是由于苹果...

    总结IOS关闭键盘/退出键盘的五种方式

    在iOS应用开发中,用户与屏幕上的输入框交互时,会触发虚拟键盘的弹出。然而,有时我们希望提供更加友好的用户体验,让用户能够轻松地关闭键盘,而不仅仅是通过输入框的return键。以下是五种在iOS中关闭或退出键盘的...

    ios源码之解决键盘遮挡和view传值的Demo.rar

    1. 使用UIScrollView:如果你的视图包含多个输入框并被放置在一个UIScrollView内,你可以设置scroll view的contentInset和scrollIndicatorInsets,使其在键盘出现时自动调整,使输入框保持可见。此外,...

    小方块输入框

    通常,"小方块输入框"是通过自定义视图(Custom View)来创建的,这需要开发者具备扎实的Android或iOS平台上的UI开发基础。在Android中,我们可以继承自`View`类或者使用`TextInputLayout`等现有组件进行扩展,而在...

    swift-SXTextView一个TextView无限输入不被键盘遮挡

    Swift-SXTextView是一个专门解决TextView在用户输入时被键盘遮挡问题的解决方案,它确保了用户可以无限输入而不受键盘的影响。这个项目利用了第三方库IQKeyboardManager以及Masonry来实现这一功能,下面我们将深入...

    动态调整textView的高度,不被keyboard遮盖

    为了提供良好的交互体验,开发者需要能够动态调整TextView的高度,使其不被键盘覆盖。这篇博客"动态调整textView的高度,不被keyboard遮盖"正是探讨了这个问题的解决方案。 首先,我们要理解为什么TextView会被键盘...

    SelfDefineKeyboard:iOS自定义键盘demo

    在iOS平台上,自定义键盘(通常称为第三方键盘)允许开发者为用户提供独特的输入体验。本教程将深入探讨如何使用Objective-C创建一个自定义键盘,通过分析标题"SelfDefineKeyboard:iOS自定义键盘demo"和描述中的内容...

Global site tag (gtag.js) - Google Analytics