Как остановить прокрутку tableView при появлении клавиатуры?

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

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

Я хотел бы знать, можно ли отключить прокрутку таблицы при появлении клавиатуры, и если да, то как?


person Kristoffer M Sanio    schedule 17.03.2014    source источник


Ответы (2)


Поведение автопрокрутки находится в функциональности UITableViewCONTROLLER. Чтобы отключить автоматическую прокрутку, я нашел два способа:

1) используйте вместо UITableViewController просто UIViewController - установите источник данных и делегируйте самостоятельно

2) Переопределите viewWillAppear-Routine и НЕ вызывайте [super viewWillAppear: анимированный]. С обоими решениями вы отключаете не только автопрокрутку, но и некоторые другие приятные, но не

основные функции, описанные в обзоре справочника классов Apple: http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableViewController_Class/Reference/Reference.html

person Irfan    schedule 17.03.2014
comment
Этот ответ взят отсюда: stackoverflow.com/a/12010951/1751778 - person Avario; 11.12.2016
comment
я использую UITableViewController, если я не использую функцию supper.viewWillApper(), то мой нижний колонтитул не появляется в верхней части keyBoard, что мне делать для этого Means i want to stop auto scrolling and want footer view on the top of keyboard while editing - person Pushpendra; 05.04.2017

мы можем отключить прокрутку таблицы несколькими способами.

1) В методах делегата textView

- (void)textViewDidBeginEditing:(UITextView *)textView{
           tableView.scrollEnabled = NO;
}


- (void)textViewDidEndEditing:(UITextView *)textView{
 tableView.scrollEnabled = YES;
}

2) Уведомления клавиатуры

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

- (void)keyboardWillShow:(NSNotification *)notif {
    tableView.scrollEnabled = NO;
}

- (void)keyboardWillHide:(NSNotification *)notif {
    tableView.scrollEnabled = YES;
}
person Thukaram    schedule 17.03.2014
comment
не работает быстро;( есть идеи?! - person Mojtabye; 31.12.2015