Как прокрутить ячейку UITableView так, чтобы она не мешала экранной клавиатуре? - PullRequest
1 голос
/ 18 июня 2011

Это должно быть распространенной проблемой ... У меня есть UITextField внутри ячейки таблицы, и я хочу позволить пользователю редактировать ее.Однако когда появляется клавиатура, она часто скрывает текстовое поле.

Я пытался использовать scrollToRowAtIndexPath:atScrollPosition, но на удивление это не работает.Я пытался установить UITableViewScrollPosition на {None,Top,Button,Middle}.

В чем секрет скроллинга, который мне не хватает?

Спасибо.

Ответы [ 2 ]

3 голосов
/ 18 июня 2011

Секрет в том, что вам нужно вручную реализовать это поведение, и это боль.

Есть несколько шагов, которые вы должны сделать:

Шаг 1:Регистрация для уведомлений клавиатуры

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

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

}

Шаг 2: измените размер содержимого, когда появляется клавиатура

- (void)keyboardWasShown:(NSNotification *)notification {
    NSDictionary* info = [notification userInfo];
    CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;

    UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0f, 0.0f, kbSize.height, 0.0f);
    self.tableview.contentInset = contentInsets;
    self.tableview.scrollIndicatorInsets = contentInsets;

    [self.scrollView scrollRectToVisible:self.selectedView.frame animated:YES];
}

Предполагается, что вы получилиСвойство в вашем классе называется selectedView.Есть и другие способы сделать это, но главное - как-то вам нужно знать, какой прямоугольник просмотра должен видеть пользователь.

Шаг 3: Сбросить табличное представление при исчезновении клавиатуры

- (void)keyboardWillBeHidden:(NSNotification *)notification {
    UIEdgeInsets contentInsets = UIEdgeInsetsZero;
    self.tableview.contentInset = contentInsets;
    self.tableview.scrollIndicatorInsets = contentInsets;
}

Шаг 4. Отмена регистрации для уведомлений

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];

    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidHideNotification object:nil];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidShowNotification object:nil];
}
0 голосов
/ 18 июня 2011

Итак, ячейка таблицы скрывает ваше текстовое поле, верно? Почему вы хотите решить с помощью прокрутки? Измените способ добавления вашего текстового поля в ячейку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...