`

通用方法解决UITextFiled输入时键盘遮挡问题

 
阅读更多

http://www.codeios.com/thread-9770-1-1.html

 

我们在用键盘录入的时候,有可能会遮挡录入框,所以我们应调整UIView的位置,使其不被遮挡。我写了一个通用的方法可以解决这个问题:

  1. - (void)moveView:(UITextField *)textField leaveView:(BOOL)leave  
  2. {  
  3.     UIView *accessoryView = textField.inputAccessoryView;  
  4.     UIView *inputview     = textField.inputView;  
  5.       
  6.     int textFieldY = 0;  
  7.     int accessoryY = 0;  
  8.     if (accessoryView && inputview)   
  9.     {  
  10.         CGRect accessoryRect = accessoryView.frame;  
  11.         CGRect inputViewRect = inputview.frame;  
  12.         accessoryY = 480 - (accessoryRect.size.height + inputViewRect.size.height);  
  13.     }  
  14.     else if (accessoryView)  
  15.     {  
  16.         CGRect accessoryRect = accessoryView.frame;  
  17.         accessoryY = 480 - (accessoryRect.size.height + 216);  
  18.     }  
  19.     else if (inputview)  
  20.     {  
  21.         CGRect inputViewRect = inputview.frame;  
  22.         accessoryY = 480 -inputViewRect.size.height;  
  23.     }  
  24.     else  
  25.     {  
  26.         accessoryY = 264; //480 - 216;  
  27.     }  
  28.       
  29.       
  30.     CGRect textFieldRect = textField.frame;  
  31.     textFieldY = textFieldRect.origin.y + textFieldRect.size.height + 20;  
  32.       
  33.     int offsetY = textFieldY - accessoryY;  
  34.     if (!leave && offsetY > 0)   
  35.     {  
  36.         int y_offset = -5;  
  37.           
  38.         y_offset += -offsetY;  
  39.           
  40.         CGRect viewFrame = self.view.frame;  
  41.           
  42.         viewFrame.origin.y += y_offset;  
  43.           
  44.         [UIView beginAnimations:nil context:NULL];  
  45.         [UIView setAnimationBeginsFromCurrentState:YES];  
  46.         [UIView setAnimationDuration:0.3];  
  47.         [self.view setFrame:viewFrame];  
  48.         [UIView commitAnimations];  
  49.     }  
  50.     else  
  51.     {  
  52.         CGRect viewFrame = CGRectMake(0, 20, 320, 460);  
  53.           
  54.         [UIView beginAnimations:nil context:NULL];  
  55.         [UIView setAnimationBeginsFromCurrentState:YES];  
  56.         [UIView setAnimationDuration:0.3];  
  57.         [self.view setFrame:viewFrame];  
  58.         [UIView commitAnimations];  
  59.     }  
  60. }  
复制代码

用法很简单,在UITextFieldDelegate的两个方法里分别调用一下这个方法就OK了,如下示例:

  1. - (void)textFieldDidBeginEditing:(UITextField *)textField  
  2. {  
  3.         [self moveView:textField leaveView:NO];  
  4. }  
  5.   
  6. - (void)textFieldDidEndEditing:(UITextField *)textField;  
  7. {  
  8.     [self moveView:textField leaveView:YES];  
  9. }  
复制代码
分享到:
评论

相关推荐

    解决键盘遮挡输入框

    "解决键盘遮挡输入框"这一问题,是移动应用开发中的常见挑战,尤其是对于那些需要频繁使用输入框的社交、聊天或者表单填写类应用。这个问题的核心在于如何在用户打开键盘时,动态调整界面布局,确保输入框始终可见,...

    swift-一行代码解决UITextFiled和UITextView限制字数和输入特殊字符

    在处理用户输入时,我们可以监听它们的编辑变化,通过代理方法来实现输入的控制。 Swift提供了强大的泛型和字符串处理能力,这使得我们可以方便地编写一个扩展,为UITextField和UITextView添加自定义的限制功能。...

    UITextfiled

    `placeholder`属性可以设置提示文本,展示在用户未输入内容时;`text`属性则用来获取或设置用户当前输入的内容;`clearButtonMode`属性可以控制清除按钮是否显示及何时显示。`delegate`属性是`UITextField`的核心,...

    iOS开发中防止键盘挡住UITextField解决方案

    键盘不能自动的调整界面的布局,需要手动的调整位置才可以,所以自己研究和拿着笔话,想写一个通用的方法来实现每一个界面自动适配键盘的位置,这样的话,不用每一个界面去操作界面的位置了,具体的解决方案如下:1....

    使用UITextField限制只可输入中,英文,数字的方法

    最后,为了处理用户在中文输入模式下输入时可能出现的编辑范围问题,文章中还提到了对UITextRange对象的操作,判断是否存在选中文本,并相应地调整文本。当存在中文字符时,检查选中的文本范围并适当处理以确保输入...

    iOS 使用UITextField自定义搜索框 实现用户输入完之后“实时搜索”功能

    为了解决这个问题,我们可以采取一种折衷的方法:监听`UITextFieldTextDidChangeNotification`,但不立即执行搜索,而是设定一个延迟,如1.5秒。如果在这段时间内用户没有继续输入,说明他们可能已经完成了输入,...

    iOS_UILabel and UITextField

    在iOS开发中,`UILabel`和`UITextField`是两个非常重要的UI组件,它们在构建用户界面时起到不可或缺的作用。这两个控件都属于UIKit框架,用于显示文本内容,但它们的功能和用途有所不同。让我们深入探讨一下它们的...

    ios-自动换行的textField.zip

    最后,别忘了在`textView`的`textDidChange`代理方法中调用`updateTextViewHeight()`,确保每次文本变化时,高度都会自动调整。 ```swift extension ViewController: UITextViewDelegate { func textViewDidChange...

    Keyboard Bar TextField(iPhone源代码)

     让被弹出的键盘挡住的 UITextFiled(文字输入框)出现在弹出键盘的tool bar上,从而让用户可以在被遮挡住的 UITextField 上输入文字。 小编注:为了避免弹出键盘遮挡住文字输入框,一般的方法是视图整体往上移动...

    限制整数和小数位数

    UITextFiled控件,限制输入浮点数的整数以及小数的位数; .

    UITextField自动补全,补全内容为选中状态

    1. `textField(_:shouldChangeCharactersIn:replacementString:)`:此方法会在用户输入时被调用,我们可以在其中检查用户当前输入的字符,然后根据这些字符匹配并显示可能的补全选项。 2. `textField(_:shouldClear...

    LabelWithPlaceholder_CreatedByZero

    在iOS开发中,我们经常需要使用到用户输入界面,如UITextField,它提供了基本的文本输入功能,包括占位符(Placeholder)来提示用户输入信息。然而,在某些情况下,我们可能只需要展示提示信息,不需要用户输入,...

    IOS 中UITextField和UITextView中字符串为空和空格的解决办法

    除了上述基本的检查方法,还可以在输入时就进行限制,例如使用 `UITextFieldDelegate` 或 `UITextViewDelegate` 的方法来实时监控用户的输入。通过监听 `textField:shouldChangeCharactersInRange:replacementString...

    iOS键盘如何添加隐藏键盘功能

    控件对象可以是UITextFiled,UITextView,UISearchBar 等一系列调用键盘输入的类的实例 1.自定义个UIBarButtonItem,添加属性editableView,editableView存储需要添加隐藏键盘功能的那个控件 #import @interface ...

    UITextFieldEx:扩展 UITextField 以允许将只读文本添加到末尾-开源

    UITextFieldEx 是我在看到 Apple 扩展 UITextField(可可触摸)后开发的组件,当您在 iOS 设备上设置 @me 帐户时,他们使用了该组件。 该组件的作用与 UITextField 相同,但添加了 1 个 UILabel:readOnlyText。 这...

    UITextField的字体变化

    在iOS开发中,`UITextField` 是一个非常重要的控件,用于接收用户输入文本。这个话题集中在`UITextField`的字体变化上,特别是在控件成为第一响应者(focus)时以及失去焦点(resigning first responder)时的行为。...

    SDTextFiledAnimation:TextFiled动画,支持纯代码创建的TextFiled,点击登陆框,动画

    SDTextFiledAnimation 封装了一个TextFiled动画的类,支持纯代码创建的TextFiled 动画效果是仿Linkin和仿陌陌之前版本的,贝塞尔曲线动画,UITextFiled文字点击动画化

Global site tag (gtag.js) - Google Analytics