如何防止键盘覆盖UITextView中的文本?

时间:2015-09-06 23:58:17

标签: ios swift

我在ViewController中有一个覆盖整个屏幕的UITextView但是当我运行应用程序并输入它时,如果我键入键盘然后它就不会向上滚动。如果我一直打到屏幕的最底部,它只会向上滚动,但是如果我键入键盘的位置,那么TextView就不会滚动,而且我键入的任何内容都是隐藏的。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

您可以更改textview的框架,使其不在键盘下方。

您可以使用此代码对正在显示的键盘作出反应并获得键盘的大小。

[[NSNotificationCenter defaultCenter] addObserver:self
                                 selector:@selector(keyboardWasShown:)
                                     name:UIKeyboardDidShowNotification
                                   object:nil];

- (void)keyboardWasShown:(NSNotification *)notification
{

 CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;


int height = MIN(keyboardSize.height,keyboardSize.width);
int width = MAX(keyboardSize.height,keyboardSize.width);

//Place code here to resize textview

}

答案 1 :(得分:0)

你可以试试这个

这些是textfield的委托方法。

请确保您在.h文件中包含<UITextFieldDelegate>

- (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)

构建

IQKeyboardManager是为了创建这个确切的问题。它只需要一行代码:

IQKeyboardManager.sharedManager().enable = true

我强烈建议您使用它而不是开发自己的解决方案(虽然是好的做法,但非常耗时)。