3

我有两个 UITextView,一个在 UIView 的顶部,另一个在 UIView 的底部。

我使用此代码在键盘出现时移动 UIView。

  - (void) viewDidLoad
{

[[NSNotificationCenter defaultCenter] addObserver:self
                                selector:@selector(keyboardWillShow)
                                    name:UIKeyboardWillShowNotification
                                  object:nil];

[[NSNotificationCenter defaultCenter] addObserver:self
                                selector:@selector(keyboardWillHide)
                                    name:UIKeyboardWillHideNotification
                                  object:nil];

}


-(void)keyboardWillShow {
    // Animate the current view out of the way
    [UIView animateWithDuration:0.3f animations:^ {
        self.frame = CGRectMake(0, -160, 320, 480);
    }];
}

-(void)keyboardWillHide {
    // Animate the current view back to its original position
    [UIView animateWithDuration:0.3f animations:^ {
        self.frame = CGRectMake(0, 0, 320, 480);
    }];
}

当我从底部使用 UITextView 时效果很好。但我的问题是,当我想从 UIView 顶部使用 UITextView 时,键盘出现,UIView 向上移动,但我的顶部 UITextView 也向上移动。请帮助我,如果用户想从顶部在 UITextView 上键入文本,我不想移动 UIView。

4

1 回答 1

7

我在项目中使用的一个非常简单的方法是 TPKeyboardAvoiding 库。

https://github.com/michaeltyson/TPKeyboardAvoiding

下载源代码,将 4 个文件放入您的项目中。在 InterfaceBuilder 中确保您的 TextViews 在 UIScrollView 或 UITableView 内,然后将该滚动视图或 tableview 的类更改为 TPAvoiding 子类。

如果您不想这样做,您的另一个选择是检查正在使用哪个 TextView 并且仅在您想要的键盘是选定的键盘时才进行动画处理,即:

-(void)keyboardWillShow {
    // Animate the current view out of the way
   if ([self.textFieldThatNeedsAnimation isFirstResponder]) {
        [UIView animateWithDuration:0.3f animations:^ {
        self.frame = CGRectMake(0, -160, 320, 480);
        }];
        self.animated = YES;
    }
}

-(void)keyboardWillHide {
    // Animate the current view back to its original position
    if (self.animated) {
      [UIView animateWithDuration:0.3f animations:^ {
          self.frame = CGRectMake(0, 0, 320, 480);
      }];
      self.animated = NO;
    }
}
于 2013-05-25T17:35:06.290 回答