http://www.codeios.com/thread-9770-1-1.html
我们在用键盘录入的时候,有可能会遮挡录入框,所以我们应调整UIView的位置,使其不被遮挡。我写了一个通用的方法可以解决这个问题:
- - (void)moveView:(UITextField *)textField leaveView:(BOOL)leave
- {
- UIView *accessoryView = textField.inputAccessoryView;
- UIView *inputview = textField.inputView;
-
- int textFieldY = 0;
- int accessoryY = 0;
- if (accessoryView && inputview)
- {
- CGRect accessoryRect = accessoryView.frame;
- CGRect inputViewRect = inputview.frame;
- accessoryY = 480 - (accessoryRect.size.height + inputViewRect.size.height);
- }
- else if (accessoryView)
- {
- CGRect accessoryRect = accessoryView.frame;
- accessoryY = 480 - (accessoryRect.size.height + 216);
- }
- else if (inputview)
- {
- CGRect inputViewRect = inputview.frame;
- accessoryY = 480 -inputViewRect.size.height;
- }
- else
- {
- accessoryY = 264; //480 - 216;
- }
-
-
- CGRect textFieldRect = textField.frame;
- textFieldY = textFieldRect.origin.y + textFieldRect.size.height + 20;
-
- int offsetY = textFieldY - accessoryY;
- if (!leave && offsetY > 0)
- {
- int y_offset = -5;
-
- y_offset += -offsetY;
-
- CGRect viewFrame = self.view.frame;
-
- viewFrame.origin.y += y_offset;
-
- [UIView beginAnimations:nil context:NULL];
- [UIView setAnimationBeginsFromCurrentState:YES];
- [UIView setAnimationDuration:0.3];
- [self.view setFrame:viewFrame];
- [UIView commitAnimations];
- }
- else
- {
- CGRect viewFrame = CGRectMake(0, 20, 320, 460);
-
- [UIView beginAnimations:nil context:NULL];
- [UIView setAnimationBeginsFromCurrentState:YES];
- [UIView setAnimationDuration:0.3];
- [self.view setFrame:viewFrame];
- [UIView commitAnimations];
- }
- }
复制代码
用法很简单,在UITextFieldDelegate的两个方法里分别调用一下这个方法就OK了,如下示例:
- - (void)textFieldDidBeginEditing:(UITextField *)textField
- {
- [self moveView:textField leaveView:NO];
- }
-
- - (void)textFieldDidEndEditing:(UITextField *)textField;
- {
- [self moveView:textField leaveView:YES];
- }
复制代码
分享到:
相关推荐
"解决键盘遮挡输入框"这一问题,是移动应用开发中的常见挑战,尤其是对于那些需要频繁使用输入框的社交、聊天或者表单填写类应用。这个问题的核心在于如何在用户打开键盘时,动态调整界面布局,确保输入框始终可见,...
在处理用户输入时,我们可以监听它们的编辑变化,通过代理方法来实现输入的控制。 Swift提供了强大的泛型和字符串处理能力,这使得我们可以方便地编写一个扩展,为UITextField和UITextView添加自定义的限制功能。...
`placeholder`属性可以设置提示文本,展示在用户未输入内容时;`text`属性则用来获取或设置用户当前输入的内容;`clearButtonMode`属性可以控制清除按钮是否显示及何时显示。`delegate`属性是`UITextField`的核心,...
键盘不能自动的调整界面的布局,需要手动的调整位置才可以,所以自己研究和拿着笔话,想写一个通用的方法来实现每一个界面自动适配键盘的位置,这样的话,不用每一个界面去操作界面的位置了,具体的解决方案如下:1....
最后,为了处理用户在中文输入模式下输入时可能出现的编辑范围问题,文章中还提到了对UITextRange对象的操作,判断是否存在选中文本,并相应地调整文本。当存在中文字符时,检查选中的文本范围并适当处理以确保输入...
为了解决这个问题,我们可以采取一种折衷的方法:监听`UITextFieldTextDidChangeNotification`,但不立即执行搜索,而是设定一个延迟,如1.5秒。如果在这段时间内用户没有继续输入,说明他们可能已经完成了输入,...
在iOS开发中,`UILabel`和`UITextField`是两个非常重要的UI组件,它们在构建用户界面时起到不可或缺的作用。这两个控件都属于UIKit框架,用于显示文本内容,但它们的功能和用途有所不同。让我们深入探讨一下它们的...
最后,别忘了在`textView`的`textDidChange`代理方法中调用`updateTextViewHeight()`,确保每次文本变化时,高度都会自动调整。 ```swift extension ViewController: UITextViewDelegate { func textViewDidChange...
让被弹出的键盘挡住的 UITextFiled(文字输入框)出现在弹出键盘的tool bar上,从而让用户可以在被遮挡住的 UITextField 上输入文字。 小编注:为了避免弹出键盘遮挡住文字输入框,一般的方法是视图整体往上移动...
UITextFiled控件,限制输入浮点数的整数以及小数的位数; .
1. `textField(_:shouldChangeCharactersIn:replacementString:)`:此方法会在用户输入时被调用,我们可以在其中检查用户当前输入的字符,然后根据这些字符匹配并显示可能的补全选项。 2. `textField(_:shouldClear...
在iOS开发中,我们经常需要使用到用户输入界面,如UITextField,它提供了基本的文本输入功能,包括占位符(Placeholder)来提示用户输入信息。然而,在某些情况下,我们可能只需要展示提示信息,不需要用户输入,...
除了上述基本的检查方法,还可以在输入时就进行限制,例如使用 `UITextFieldDelegate` 或 `UITextViewDelegate` 的方法来实时监控用户的输入。通过监听 `textField:shouldChangeCharactersInRange:replacementString...
控件对象可以是UITextFiled,UITextView,UISearchBar 等一系列调用键盘输入的类的实例 1.自定义个UIBarButtonItem,添加属性editableView,editableView存储需要添加隐藏键盘功能的那个控件 #import @interface ...
UITextFieldEx 是我在看到 Apple 扩展 UITextField(可可触摸)后开发的组件,当您在 iOS 设备上设置 @me 帐户时,他们使用了该组件。 该组件的作用与 UITextField 相同,但添加了 1 个 UILabel:readOnlyText。 这...
在iOS开发中,`UITextField` 是一个非常重要的控件,用于接收用户输入文本。这个话题集中在`UITextField`的字体变化上,特别是在控件成为第一响应者(focus)时以及失去焦点(resigning first responder)时的行为。...
SDTextFiledAnimation 封装了一个TextFiled动画的类,支持纯代码创建的TextFiled 动画效果是仿Linkin和仿陌陌之前版本的,贝塞尔曲线动画,UITextFiled文字点击动画化