Создание прокрутки ячейки таблицы при отображении клавиатуры - PullRequest
5 голосов
/ 23 мая 2011

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

Я тщательно искал stackoverflow и нашел несколько разных решений. Большинство из них связано с вычислениями для перемещения или прокрутки вида вверх. Теперь есть пример кода от Apple, который называется TaggedLocations. У них точно такое же поведение. И нет никакого кода, делающего какие-либо сложные вычисления, чтобы переместить представление вверх.

Я также тщательно проверил интерфейс IB и не смог найти ничего необычного. Если вы загружаете и запускаете код, он прекрасно поднимает строку в идеальное положение для редактирования.

Кто-нибудь знает, какая хитрость есть в проекте TaggedLocations, который делает это так элегантно? Расположение проекта: http://developer.apple.com/library/ios/#samplecode/TaggedLocations/Introduction/Intro.html%23//apple_ref/doc/uid/DTS40008914

Для сложных вычислений, на которые я ссылался, посмотрите на следующий поток, например:

Как заставить UITextField двигаться вверх при наличии клавиатуры?

спасибо

Ответы [ 4 ]

1 голос
/ 02 июня 2011

Я разобрался в проблеме.Изначально у меня было

TabBarController
- UIViewController
- UINavigationController
--- UITableViewController

- UIViewController
- -UINavigationController
--- UITableCable1010 *

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

TabBarController
- UINavigationController
- UITableViewController

- UINavigationController
-- UITableViewController

Когда я дублировал код Apple, я каким-то образом испортил иерархию.Теперь при переходе на новую иерархию все работает нормально.Никакого дополнительного кода или расчета не требуется.

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

Эта строка в RootViewController.m является причиной прокрутки:

[self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:YES];

Поместите это в ваш метод cellForRowAtIndexPath:, и он должен работать.

0 голосов
/ 05 марта 2012

У меня была похожая путаница с примером кода Apple TaggedLocations, хотя в моем случае я понял, что моим табличным представлением управляет подкласс UIViewController, а не подкласс UITableViewController, и UITableViewController, очевидно, управляет прокруткой для вас.Он работает довольно хорошо, поэтому многие из этих сложных расчетов не нужны.Хотел бы я не тратить так много времени, пытаясь понять их.

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

0 голосов
/ 11 июня 2011

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

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