2013-04-21 5 views
7

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

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

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

+0

взгляд на этот вопрос http://stackoverflow.com/questions/4585718/disable-uiscrollview-scrolling-when-uitextfield-becomes-first-responder –

+0

Я Не уверен, что это потому, что это UITableView, а не прямой UIScrollView, или потому, что эти решения были предложены в рамках старого SDK, но ни одно из предлагаемых решений в этом сообщении не работало для меня. С каждым решением мой TableView по-прежнему прокручивается автоматически. –

+0

[Этот ответ] (http://stackoverflow.com/a/32313035/4482870) (мое) описывает довольно простое решение проблемы. – tonso

ответ

1

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

Вместо этого я изменил этот контроллер subView на подкласс UIViewController, а не на UITableViewController. то есть для моего TransportViewController.h, который управляет 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 и обработать ваши собственные методы автоматической прокрутки.

0

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

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

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

этот метод вызывается при любом изменении смещения содержимого. – Andy

Смежные вопросы