Переместить вид, когда клавиатура не скрывает текстовое поле - PullRequest
4 голосов
/ 11 мая 2011

В моем приложении, когда я нажимаю на текстовое поле, клавиатура скрывает его. Пожалуйста, помогите мне - как я могу переместить мой вид вверх, когда я нажимаю на текстовое поле. Я использую этот код в textFieldDidBeginEditing:

self.tableView.scrollIndicatorInsets = UIEdgeInsetsMake(0, 0, 216, 0);
self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 216, 0);

но это не работает.

Ответы [ 2 ]

13 голосов
/ 11 мая 2011

Вы не должны доверять textFieldDidBeginEditing: для настройки клавиатуры, так как этот метод будет вызываться, даже если пользователь печатает на физической клавиатуре, где не отображается экранная клавиатура.

Вместо этого слушайтеUIKeyboardWillShowNotification, который срабатывает только тогда, когда на самом деле будет отображаться клавиатура.Вам необходимо выполнить три этапа:

  1. Определить фактический размер клавиатуры из словаря уведомлений userInfo.Размер будет отличаться от альбомного / портретного и разных устройств.
  2. Обновите contentInset, используя определенный размер.Вы можете сделать это анимированно, уведомление даже сообщит вам продолжительность анимации клавиатуры.
  3. Прокрутите текстовое поле в поле зрения, это очень легко забыть!

Вы найдете больше информациии образец кода от здесь

1 голос
/ 11 мая 2011

Вы можете сделать следующее, но сначала убедитесь, что вы установили делегата UITextField себе и

#define kOFFSET_FOR_KEYBOARD 350;

вверху. Это то, насколько вы хотите, чтобы смещение вида

//method to move the view up/down whenever the keyboard is shown/dismissed

-(void)setViewMovedUp:(BOOL)movedUp
{
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.3]; // if you want to slide up the view
    [UIView setAnimationBeginsFromCurrentState:YES];

    CGRect rect = self.view.frame;
    if (movedUp)
    {
        // 1. move the view's origin up so that the text field that will be hidden come above the keyboard 
        // 2. increase the size of the view so that the area behind the keyboard is covered up.

        if (rect.origin.y == 0 ) {
            rect.origin.y -= kOFFSET_FOR_KEYBOARD;
            //rect.size.height += kOFFSET_FOR_KEYBOARD;
        }

    }
    else
    {
        if (stayup == NO) {
            rect.origin.y += kOFFSET_FOR_KEYBOARD;
            //rect.size.height -= kOFFSET_FOR_KEYBOARD;
        }
    }
    self.view.frame = rect; 
    [UIView commitAnimations];
}


- (void)keyboardWillHide:(NSNotification *)notif {
    [self setViewMovedUp:NO];
}


- (void)keyboardWillShow:(NSNotification *)notif{
    [self setViewMovedUp:YES];
}


- (void)textFieldDidBeginEditing:(UITextField *)textField {
    stayup = YES;
    [self setViewMovedUp:YES];
}


- (void)textFieldDidEndEditing:(UITextField *)textField {
    stayup = NO;
    [self setViewMovedUp:NO];
}

- (void)viewWillAppear:(BOOL)animated
{
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) 
                                                 name:UIKeyboardWillShowNotification object:self.view.window];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) 
                                                 name:UIKeyboardWillHideNotification object:self.view.window];
}

- (void)viewWillDisappear:(BOOL)animated
{
    // unregister for keyboard notifications while not visible.
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil];
}
...