2013-05-12 1 views
-1

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

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:1 inSection:1]; 

[self.tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone]; 

мой делегат,

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

не дозвонились.

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

Почему это может быть?

+0

Этот вопрос был бы тривиально ответил, читая документы на 'selectRowAtIndexPath:'. Пожалуйста, попробуйте прочитать документы перед использованием пропускной способности. – matt

ответ

3

Потому что так работает каркас. Попробуйте прочитать документы. Для этого они нужны!

selectRowAtIndexPath:animated:scrollPosition:

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

Это довольно легко понять. Метод делегата didSelectRowAtIndexPath: не вызывается, если вы выбираете строку в коде (программно). Он вызывается только в том случае, если пользователь выбирает строку.

И это имеет смысл, потому что:

  • Если вы выбираете строку в коде, вы не можете метод делегата срабатывает.

  • Если вы используете do, то хотите, чтобы метод делегата был запущен, так как вы находитесь в своем собственном коде, вы можете просто позвонить ему.

  • Вам не нужно метод делегата, чтобы узнать, что строка была выбрана, потому что вы выбрали его в коде - вы не можете не знать!

+0

@stackOverFlew - Обратите внимание, что за этим шаблоном следует большинство (если не все) 'UIKit'. Делегаты вызываются только тогда, когда что-то делает пользователь, никогда, когда действие явно выполняется с помощью кода. Это хорошая вещь. В противном случае вы можете закончиться бесконечной рекурсией, потому что обычно используется реализация метода делегата для изменения только что измененного значения. – rmaddy

+0

сама ячейка не показывает никаких признаков того, что она также выбрана. – stackOverFlew

+0

Возможно, 'viewDidAppear' слишком скоро. Но в любом случае это будет другой вопрос; вам нужно будет предоставить информацию о том, когда и как вы заполняете свою таблицу в первую очередь, независимо от того, являются ли эти ячейки стандартными или обычными, и т. д. – matt

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