Запретить прокрутку UITableView в ячейку, содержащую текстовое поле

UITableView, похоже, имеет некоторое автоматическое поведение, где, если ячейка содержит текстовое поле или textView, и это поле или представление становится первым ответчиком, tableView прокручивает себя так, чтобы ячейка не была затемнена клавиатурой. Уверен, что в большинстве случаев это очень удобно.

в моем случае это бесполезно. TableView находится в меньшем containerView, и поведение по умолчанию оставляет поле все еще скрытым. Я хочу сам справиться с перемещением всего контейнера, и поведение прокрутки по умолчанию становится на пути.

кто-нибудь знает, как я могу "отключить" эту функцию UITableView?

2 ответов


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

вместо этого я изменил этот контроллер подвида на подкласс UIViewController вместо UITableViewController. Я. e для моего TransportViewController.h который контролирует a метод TableView:

@interface TransportViewController : UITableViewController <UITextFieldDelegate>

стало:

@interface TransportViewController : UIViewController <UITextFieldDelegate, UITableViewDataSource, UITableViewDelegate>

установив класс как класс UIViewController вместо этого, автоматическая прокрутка ячеек таблицы не произойдет.

теперь, когда вы не подклассы UITableViewController теперь необходимо вручную установить свойство 'tableView', чтобы указать на соответствующее представление таблицы. Вы можете подключить это в IB, который даст вам что-то вроде:

@property (strong, nonatomic) IBOutlet UITableView *tableView;

наконец, Вам также придется установить этот недавно назначенный свойство tableView должно быть делегатом и источником данных таблицы. Вы можете сделать это в методе 'viewDidLoad' следующим образом:

- (void)viewDidLoad
{
    [super viewDidLoad];

    _tableView.dataSource = self;
    _tableView.delegate = self;

}

это остановит автоматическую прокрутку, которая присуща UITableViewController при выборе UITextField. Затем вы должны реализовать любые необходимые методы UITableViewDataSource и обработать свои собственные методы автоматической прокрутки.


Я решил это путем реализации scrollViewDidScroll: метод (с UIScrollViewDelegate протокола). Этот метод вызывается, когда клавиатура делает ваш UITableView свиток.

вот что я сделал:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    [tableViewController.tableView setContentOffset:CGPointMake(0., 0.)];
}