【问题标题】:iOS Bring UIView up before keyboard?iOS 在键盘之前启动 UIView?
【发布时间】:2015-08-31 01:35:39
【问题描述】:

我的 UIView 中有两个 UIView。这是我的看法:

在以文本字段为焦点时,会显示键盘,而键盘会隐藏我的文本字段。我想在键盘之前向上移动整个 TextField 视图。我在stackoverflow上找到了代码示例: iPhone Keyboard Covers UITextField

这是代码:

- (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];
}

我正在尝试实现这一点,但我遇到了麻烦。有人可以解释如何正确地做到这一点吗?

【问题讨论】:

标签: ios objective-c uiview keyboard


【解决方案1】:

而不是手动执行此操作。使用TPKeyboardAvoidingScrollView。 它易于使用。

首先取 UIScrollView 并将所有视图放入其中。

要与 UITableViewController 类一起使用,请将 TPKeyboardAvoidingTableView.m 和 TPKeyboardAvoidingTableView.h 放入您的项目中,并将您的 UITableView 设置为 xib 中的 TPKeyboardAvoidingTableView。如果您没有在控制器中使用 xib,我知道没有简单的方法使其 UITableView 成为自定义类:阻力最小的路径是为其创建 xib。

对于非 UITableViewControllers,将 TPKeyboardAvoidingScrollView.m 和 TPKeyboardAvoidingScrollView.h 源文件拖放到项目中,将 UIScrollView 弹出到视图控制器的 xib 中,将滚动视图的类设置为 TPKeyboardAvoidingScrollView,然后将所有控件放在该滚动视图中。您也可以通过编程方式创建它,而无需使用 xib - 只需使用 TPKeyboardAvoidingScrollView 作为您的顶级视图。

【讨论】:

    【解决方案2】:

    您可以使用以下代码手动编写它:

    - (void)makeRoomForKeyboard
    {
        UIView *rootView = [[[UIApplication sharedApplication]delegate] window].rootViewController.view.subviews[0];
    
        [UIView animateWithDuration:0.2f animations:^{
            rootView.center = CGPointMake(rootView.center.x, rootView.center.y - kKeyboardOffset);
        } completion:nil];
    }
    

    并在您认为合适的情况下使用 kKeyboardOffset。 从 textFieldDidBeginEditing 调用它。 完成编辑后,只需在 kKeyboardOffset 前加一个 + 号即可调用相同的函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 2014-11-15
      • 2016-07-23
      • 2015-12-19
      相关资源
      最近更新 更多