-didSelectRowAtIndexPath: не вызывается - PullRequest
283 голосов
/ 01 ноября 2008

Я пишу приложение для iOS с табличным представлением внутри представления с вкладками. В моем UITableViewController я реализовал -tableView:didSelectRowAtIndexPath:, но когда я выбираю строку во время выполнения, метод не вызывается. Однако табличное представление заполняется, поэтому я знаю, что в моем контроллере вызываются другие методы tableView.

У кого-нибудь есть идеи, что я, возможно, облажался, чтобы это произошло?

Ответы [ 56 ]

8 голосов
/ 19 июля 2012

Если вы прочитаете это, значит, проблема не решена.

У меня есть настраиваемая ячейка , где флажок " Взаимодействие с пользователем включен " был отключен. Итак, я просто включаю его. Удачи.

7 голосов
/ 25 июля 2014

У меня только что было это, и как это происходило со мной в прошлом, оно не работало, потому что я не обращал внимания на автозаполнение при попытке добавить метод, и я фактически заканчиваю тем, что tableView:didDeselectRowAtIndexPath: вместо tableView:didSelectRowAtIndexPath:.

5 голосов
/ 28 июня 2016

Если ваш табличный вид находится в режиме редактирования (например, [tableView setEditing:YES animated:NO];), вам нужно установить tableView.allowsSelectionDuringEditing = YES;

5 голосов
/ 24 апреля 2009

Я знаю, что старый и проблема была решена, но была похожая проблема, я думал, что проблема была с моим пользовательским UITableViewCell, но решение было совершенно другим - я перезагружаю XCode :) и затем работает нормально! почти как винда :) 100 *

4 голосов
/ 27 июля 2013

Ни один из этих ответов не работал для меня. Примерно через час я понял что-то очень коварное:

У меня есть табличное представление внутри ячейки другого табличного представления. Я решил сделать вложение, которое, помимо прочего, содержит внутреннее табличное представление. Я вызвал это представление contentView и подключил его в xib.

Оказывается, что UITableViewCell уже имеет contentView и делает с ним странные вещи. Проблема разрешилась, когда я переименовал свойство в mainContentView и снова подключил представление к этому переименованному свойству.

4 голосов
/ 29 июня 2013

Еще одна ошибка, которую вы могли бы сделать (как я): если вы установите переход на клетку, didSelectRowAtIndexPath не вызывается. Вместо этого вы должны установить свои сегменты на контроллере вида.

4 голосов
/ 13 марта 2015

Убедитесь, что вы внедрили tableView:didSelectRowAtIndexPath, а не tableView:didDeSelectRowAtIndexPath

Это меня несколько раз получало !!

4 голосов
/ 25 июля 2014

В моем случае я динамически вычисляю высоту TableView SuperView во время загрузки. Из-за просчета TableView был расположен вне SuperView. TableView был нарисован отлично, однако все взаимодействие было отключено (и didSelectRowAtIndexPath никогда не вызывался). Очень трудно обнаружить, поскольку нет визуальной индикации того, что TableView не «доступен».

4 голосов
/ 14 марта 2017

В моем случае решение состояло в том, чтобы изменить NO на YES в следующей функции.

iOS 9 +

- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath
{
    return YES;
}
3 голосов
/ 09 марта 2016

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

Оказывается, моя проблема заключалась в том, что в коде суперкласс добавлял полноэкранный «вид ошибки», который был не скрыт, а прозрачен. Однако из-за того, что это было поверх табличного представления, а «действие пользователя» было установлено в «ДА», оно перехватывало мои прикосновения к табличному виду.

Я диагностировал это, используя классную кнопку Xcode «Debug View Hierarchy». Вот снимок экрана с аннотациями, которые, надеюсь, объясняют, что я сделал и как я в конечном итоге диагностировал проблему.

В коде мне просто нужно было сделать:

errorMessageView.setUserInteractionEnabled = NO;
// or
errorMessageView.hidden = YES;

Debug View Hierarchy

...