首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >iPhone键盘盖UITextField

iPhone键盘盖UITextField
EN

Stack Overflow用户
提问于 2009-08-07 21:32:10
回答 18查看 87.3K关注 0票数 122

我有一个应用程序,在界面生成器中,我设置了一个UIView,它在视图底部附近有一个文本字段。当我运行应用程序并尝试在该字段中输入文本时,键盘会滑到字段上方,因此在再次隐藏键盘之前,我看不到正在键入的内容。

有没有其他人遇到过这个问题,并且找到了一个很好的方法来解决它,而不是让父视图可滚动或将文本字段移动到屏幕上更远的位置?

EN

回答 18

Stack Overflow用户

回答已采纳

发布于 2009-08-08 14:29:42

通常的解决方案是使用动画向上滑动字段(以及它上面的所有内容),然后在完成时向下滑动。您可能需要将文本字段和其他一些项目放入另一个视图中,并将该视图作为一个单元进行滑动。(我将这些东西称为“板块”,就像在“构造板块”中一样,但这只是我的说法)。但如果你不需要花哨的话,这里有个大概的想法。

代码语言:javascript
复制
- (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];
}
票数 291
EN

Stack Overflow用户

发布于 2009-10-07 20:00:14

这为我创造了奇迹,sliding uitextfields

特别是,它具有根据文本字段的位置计算幻灯片动画距离的好处。

票数 38
EN

Stack Overflow用户

发布于 2013-07-18 02:08:32

IQKeyboardManager为你做到这一点,没有一行代码,只需要将相关的源文件拖放到项目中即可。IQKeyboardManager还支持Device OrientationAutomatic UIToolbar ManagementkeyboardDistanceFromTextField等比您想象中多得多的功能。

以下是控制流程图:

Step1:-在一个单独的类中添加了UITextFieldUITextViewUIKeyboard的全局通知。我管它叫IQKeyboardManager

第2步:-如果发现UIKeyboardWillShowNotificationUITextFieldTextDidBeginEditingNotificationUITextViewTextDidBeginEditingNotification通知,则尝试从UIWindow.rootViewController层次结构中获取topMostViewController实例。为了正确地发现其上的UITextField/UITextView,需要调整topMostViewController.view的帧。

步骤3:-计算topMostViewController.view相对于第一个响应的UITextField/UITextView的预期移动距离。

第四步:-根据预期的移动距离向上/向下移动topMostViewController.view.frame

第5步:-如果找到UIKeyboardWillHideNotificationUITextFieldTextDidEndEditingNotificationUITextViewTextDidEndEditingNotification通知,则再次尝试从topMostViewController层次结构中获取UIWindow.rootViewController实例。

步骤6:-计算了需要恢复到原始位置的topMostViewController.view的扰动距离。

步骤7:-根据干扰距离恢复topMostViewController.view.frame

Step8:-在应用程序加载时实例化单例IQKeyboardManager类实例,因此应用程序中的每个UITextField/UITextView都会根据预期的移动距离自动调整。

就这样

票数 28
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1247113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档