2010-01-09 2 views
4

Я знаю, что это распространенная проблема, и UITableViewController исправил это iPhone SDK 3.0, но UITableViewController работает не так, как я ожидаю, возможно, из-за того, как я его использую. Вот моя проблема:Еще одна проблема с проблемой «клавиатура скрывает UITextField»

Я работаю над формой, которая находится в сгруппированной таблице, которая содержит некоторые текстовые поля. Те, кто находится на нижней части формы, закрываются клавиатурой. Я знаю, что это старая проблема, и есть несколько примеров кода для автоматического прокрутки, но я немного больше добавлю, и мне было интересно, нашел ли кто-нибудь это и исправил его.

Во-первых: начиная с 3.0, если ваша таблица контролируется UITableViewController, вы автоматически прокручиваете эту прокрутку. Я пробовал и действительно работает. Однако я хочу использовать пользовательское фоновое изображение, с которым UITableViewController не играет в мяч. Вот что я сделал:

  1. Создайте XIB с простым видом, на котором есть изображение.
  2. Также в XIB у меня есть UIViewController (фактически мой подкласс, когда я пишу методы источника данных и т. Д.), В котором есть таблица.
  3. В моем основном представлении viewDidLoadMethod Я пробовал это: tableViewController.view.backgroundColor = [UIColor clearColor]; [self.view addSubview: tableViewController.view];

И действительно, стол выглядит так, как я ожидаю, чтобы он выглядел. Однако, когда я нажимаю на текстовое поле в таблице, я не получаю «волшебную» прокрутку, которую tableViewController должен дать мне бесплатно.

Как бы то ни было, это то же поведение, что и я вообще не использовал TableViewController, и опустил таблицу непосредственно на imageView. (Который, честно говоря, делает для 1 менее класс, и легче читать код).

Единственная причина, по которой я представил TableViewController, это получить эту автоматическую прокрутку.

Есть что-то, что мне не хватает?

ответ

0

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

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

+0

Hi JOM, Спасибо. Я сделал то же самое в конце. Действительно, я искал способ убедиться, что UITableViewController позаботился о нем, поэтому мне не пришлось этого делать. Я не нашел пути, поэтому использовал множество примеров, которые прокручивают. – dermdaly

1

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

[UIView beginAnimations:@"tableAnim" context:nil]; 
// 214 = keyboard size, adjust it if you have navigation bar or status bar 
tableView.frame = CGRectMake(0, 0, 320, 480 - 214); 
[UIView commitAnimations]; 
0

(Повторяя мой ответ от другого SO вопроса):

лично я настоятельно рекомендую использовать TPKeyboardAvoiding Майкл Тайсон.

Это очень простой в использовании ...(Цитирую из Read Me):

Для использования с UITableViewController классов, падение TPKeyboardAvoidingTableView.m и TPKeyboardAvoidingTableView.h в вашего проекта, и сделать UITableView TPKeyboardAvoidingTableView в XIb. Если вы не используете xib с вашим контроллером, я знаю нет простого способа сделать свой UITableView настраиваемым классом: путь наименьшего сопротивления - это создать xib для него.

Для нестандарт- UITableViewControllers, падение TPKeyboardAvoidingScrollView.m и TPKeyboardAvoidingScrollView.h исходных файлов в проект, поп UIScrollView в XIb вашего взгляда контроллера, установить класс мнения, скроллинга к TPKeyboardAvoidingScrollView, и поставить все ваши элементы управления в этом прокрутки. Вы также можете создавать его программно, без использования xib - просто используйте TPKeyboardAvoidingScrollView в качестве верхнего уровня .

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