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

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

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

Ответы [ 56 ]

1 голос
/ 14 октября 2010

У меня была эта проблема сама. Я построил кости представления в IB (просто View и TableView), и делегат не был установлен. Я отправил его Владельцу Файла, и это сработало как шарм. :: сохранить ::

1 голос
/ 31 октября 2013

Я получил вызов cell.userInteractionEnabled, похороненный в каком-то настроенном коде таблицы.

Глупо, но разве не большинство ошибок?

1 голос
/ 04 июля 2015

Я повторил все предыдущие ответы, но ни один из них не помог мне. После некоторых проб и ошибок я нашел другое решение. У меня был UIImageView, охватывающий всю ячейку (в качестве фона). По умолчанию в UIImageView отключено взаимодействие с пользователем. При включении метода изображения-просмотра пользовательский метод делегата -didSelectRowAtIndexPath: был вызван снова например.

cell.imgView.userInteractionEnabled = YES;
1 голос
/ 20 марта 2015

У меня периодически возникала эта проблема. Иногда прикосновение к ячейке может привести к ее выбору. Иногда он не получит событие касания.

Я использую функции, представленные в ios8, называемые ячейки с самоконтролем. Я наткнулся на это сообщение в блоге , в котором указано, что:

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

override func viewDidAppear(animated: Bool) {
    tableView.reloadData()
}

Это исправило проблему для меня. Несмотря на то, что табличное представление отображалось правильно, обработка касаний (в частности, hitTest из UITableView), по-видимому, была подвержена вышеупомянутой ошибке.

1 голос
/ 10 декабря 2014

У меня только что была эта проблема, однако она возникла не сразу; после выбора нескольких ячеек они перестанут звонить didSelectItemAtIndexPath. Я понял, что проблема заключалась в том, что для представления коллекции allowsMultipleSelection установлено значение ИСТИНА. Поскольку ячейки никогда не отменялись, это прекратило будущие вызовы от вызова didSelectItemAtIndexPath.

1 голос
/ 24 июля 2013

Другая возможная причина, по-видимому, заключается в том, что UITableView встроен в UIScrollView. У меня была эта проблема сегодня, потому что у меня случайно было представление прокрутки вместо обычного представления в качестве корневого представления моего контроллера.

0 голосов
/ 26 декабря 2018

В моем случае проблема заключалась в объявлении метода как частного.

Это не сработало:

private func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

Это сработало:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
0 голосов
/ 16 июня 2018

Я только что нашел другой способ , а не , чтобы вызвать ваш didSelect метод. В какой-то момент, во время некоторой ошибки в самом объявлении func, XCode предложил добавить @nonobjc к моему методу:

@nonobjc func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

Это будет продолжаться без жалоб, но действия пользовательского интерфейса никогда не вызовут вас.

"Это мои два цента, и я буду хотеть, чтобы мои изменения вернулись"

0 голосов
/ 02 апреля 2013

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

0 голосов
/ 28 марта 2018

в моем случае я сделал небольшую ошибку, мне присвоено:

tableView.isUserInteractionEnabled = false

должно быть:

tableView.isUserInteractionEnabled = true
...