我有一个应用程序,在界面生成器中,我设置了一个UIView
,它在视图底部附近有一个文本字段。当我运行应用程序并尝试在该字段中输入文本时,键盘会滑到字段上方,因此在再次隐藏键盘之前,我看不到正在键入的内容。
有没有其他人遇到过这个问题,并且找到了一个很好的方法来解决它,而不是让父视图可滚动或将文本字段移动到屏幕上更远的位置?
发布于 2009-08-08 14:29:42
通常的解决方案是使用动画向上滑动字段(以及它上面的所有内容),然后在完成时向下滑动。您可能需要将文本字段和其他一些项目放入另一个视图中,并将该视图作为一个单元进行滑动。(我将这些东西称为“板块”,就像在“构造板块”中一样,但这只是我的说法)。但如果你不需要花哨的话,这里有个大概的想法。
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
[self animateTextField: textField up: YES];
}
- (void)textFieldDidEndEditing:(UITextField *)textField
{
[self animateTextField: textField up: NO];
}
- (void) animateTextField: (UITextField*) textField up: (BOOL) up
{
const int movementDistance = 80; // tweak as needed
const float movementDuration = 0.3f; // tweak as needed
int movement = (up ? -movementDistance : movementDistance);
[UIView beginAnimations: @"anim" context: nil];
[UIView setAnimationBeginsFromCurrentState: YES];
[UIView setAnimationDuration: movementDuration];
self.view.frame = CGRectOffset(self.view.frame, 0, movement);
[UIView commitAnimations];
}
发布于 2009-10-07 20:00:14
这为我创造了奇迹,sliding uitextfields
特别是,它具有根据文本字段的位置计算幻灯片动画距离的好处。
发布于 2013-07-18 02:08:32
IQKeyboardManager用为你做到这一点,没有一行代码,只需要将相关的源文件拖放到项目中即可。IQKeyboardManager还支持Device Orientation、Automatic UIToolbar Management、keyboardDistanceFromTextField等比您想象中多得多的功能。
以下是控制流程图:
Step1:-在一个单独的类中添加了UITextField
、UITextView
和UIKeyboard
的全局通知。我管它叫IQKeyboardManager。
第2步:-如果发现UIKeyboardWillShowNotification
、UITextFieldTextDidBeginEditingNotification
或UITextViewTextDidBeginEditingNotification
通知,则尝试从UIWindow.rootViewController
层次结构中获取topMostViewController
实例。为了正确地发现其上的UITextField
/UITextView
,需要调整topMostViewController.view
的帧。
步骤3:-计算topMostViewController.view
相对于第一个响应的UITextField
/UITextView
的预期移动距离。
第四步:-根据预期的移动距离向上/向下移动topMostViewController.view.frame
。
第5步:-如果找到UIKeyboardWillHideNotification
、UITextFieldTextDidEndEditingNotification
或UITextViewTextDidEndEditingNotification
通知,则再次尝试从topMostViewController
层次结构中获取UIWindow.rootViewController
实例。
步骤6:-计算了需要恢复到原始位置的topMostViewController.view
的扰动距离。
步骤7:-根据干扰距离恢复topMostViewController.view.frame
。
Step8:-在应用程序加载时实例化单例IQKeyboardManager类实例,因此应用程序中的每个UITextField
/UITextView
都会根据预期的移动距离自动调整。
就这样
https://stackoverflow.com/questions/1247113
复制相似问题