Поднять клавиатуру для ячейки в UITableView? - PullRequest
0 голосов
/ 04 августа 2009

У меня есть UITableView, в котором есть пользовательские ячейки, представляющие игрока. Когда я добавляю нового игрока, добавляется новый элемент данных и вызывается [UITableView reloadData]. Часть ячейки представляет собой UITextView, который содержит имя игрока. Как мне вывести на него клавиатуру?

Я мог бы использовать intoFirstResponder, если бы у меня был доступ к UITextView в ячейке, но он еще не был создан. Поскольку reloadData на самом деле еще не выполняет создание новой ячейки.

Кто-то должен был решить это раньше. Будем весьма благодарны за любые советы о том, как сделать эту работу.

Мой фрагмент кода:

-(IBAction)addPlayerPressed:(id)sender {
Player *newPlayer = [Player alloc];
[players addObject:newPlayer];
[table reloadData];

// Scroll to bottom showing the new player location
NSIndexPath *scrollIndexPath = [NSIndexPath indexPathForRow:([players count] - 1) inSection:0];
[table scrollToRowAtIndexPath:scrollIndexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES];

// cell is always nil  :(
PlayerTableCell *cell = (PlayerTableCell *)[table cellForRowAtIndexPath:scrollIndexPath]
[cell.nameField setfirstResponder];
}

Ответы [ 3 ]

2 голосов
/ 04 августа 2009

Пара вещей:

Возможно, вам лучше использовать UITextField вместо UITextView. UITextField идеально подходит для однострочных записей, например, описываемых здесь.

Что касается вашего решения, вот что я бы порекомендовал. (Также позволил себе очистить управление памятью)

Добавьте свойство BOOL в свой класс Player с именем, скажем, 'needsKeyboardDisplay', а затем установите его равным yes после создания нового экземпляра.

-(IBAction)addPlayerPressed:(id)sender {
Player *newPlayer = [[Player alloc] init];


newPlayer.needsKeyboardDisplay = YES;


[players addObject:newPlayer];

[newPlayer release];

[table reloadData];

// Scroll to bottom showing the new player location

NSIndexPath *scrollIndexPath = [NSIndexPath indexPathForRow:([players count] - 1) inSection:0];

[table scrollToRowAtIndexPath:scrollIndexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES];


}

Затем в cellForRowAtIndexPath вставьте это после того, как вы настроили свою ячейку:

Player *playerForCell = [players objectAtIndex:indexPath.row]; 

if (playerForCell.needsKeyboardDisplay)
{
[nameField becomeFirstResponder];
playerForCell.needsKeyboardDisplay = NO;
}

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

0 голосов
/ 04 августа 2009

В своем классе PlayerTableCell вы можете поместить некоторый код в метод -initWithStyle:reuseIdentifier:, который проверяет, должен ли он стать первым респондентом и, если да, то так и есть. Возможно, у вас есть класс PlayerController или что-то подобное; Вы можете создать метод делегата для пользовательской ячейки табличного представления или чего-то подобного.

0 голосов
/ 04 августа 2009

Можно ли заставить текстовые поля делегировать UITableviewController вместо ячейки таблицы?

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