iOS在键盘之前启动UIView?

时间:2015-06-15 14:00:57

标签: ios objective-c uiview keyboard

我的UIView里面有两个UIViews。这是我的观点: enter image description here

在关注文本字段时,会显示键盘,键盘会隐藏我的文本字段。我想在键盘之前移动整个TextField View。我在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];
}

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

2 个答案:

答案 0 :(得分:1)

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

首先使用UIScrollView并将所有视图放在其中。

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

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

答案 1 :(得分:0)

You could write it manually using something like this:

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

And play around with the kKeyboardOffset as you see fit. Call this from textFieldDidBeginEditing. When you finish editing, the same function can be called with just a + sign in front of the kKeyboardOffset.