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

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

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

Ответы [ 56 ]

24 голосов
/ 25 июля 2016

ВЫ ДОЛЖНЫ выбрать эти опции

enter image description here

но если вы хотите, чтобы UITableView не выделялся при нажатии, вам следует внести изменения в UITableViewCell свойства.

Выберите «Нет» для выбора, как показано ниже

enter image description here

20 голосов
/ 10 февраля 2014

Я положил UITapGestureRecognizer в моем табличном представлении, чтобы закрыть клавиатуру, которая препятствовала вызову didSelectRowAtIndexPath:. Надеюсь, это кому-нибудь поможет.

19 голосов
/ 22 февраля 2012

Если у вас есть такая же проблема, как у меня: Очевидно, этот метод не будет вызываться, если ваш tableView находится в режиме редактирования. Вы должны установить для allowSelectionDuringEditing значение true.

С помощью этого вопроса: При редактировании `UITableView` не вызывает didSelectRowAtIndexPath ??

19 голосов
/ 10 июня 2014

У меня была такая же проблема,

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

Когда я комментирую строки, связанные с UITapGestureRecognizer, это работает. Более того, вы можете проверить в функции UITapGestureRecognizer selector, является ли нажатие UITableViewCell или нет.

11 голосов
/ 06 сентября 2018

В моем случае, didSelctRowAtIndexPath не вызывается из-за того, что я выбрал none в свойстве Selection tableView, установленное на single selection , решило мою проблему

enter image description here

11 голосов
/ 28 сентября 2015

Для Xcode 6.4, Swift 1.2. Выбор «тег» был изменен в IB. Я не знаю как и почему. Установка этого параметра на «Единый выбор» позволила снова выбрать ячейки моего табличного представления. enter image description here

10 голосов
/ 21 февраля 2013

Не забудьте установить источник данных и делегировать в методе viewDidLoad следующим образом:

[self.tableView setDelegate:self];

[self.tableView setDataSource:self];
10 голосов
/ 07 марта 2012

Несмотря на то, что был принят другой ответ, я добавлю еще одну возможную проблему и решение для людей, которые наблюдают за этой проблемой:

Если у вас включен автоматический подсчет ссылок (ARC), вы можете обнаружить, что даже после назначения вашего контроллера в качестве делегата представления сообщения представления к контроллеру не принимаются, поскольку ARC удаляет контроллер. Очевидно, указатель делегата UITableView не считается ссылкой для ARC, поэтому, если это единственная ссылка на него, контроллер будет освобожден. Вы можете проверить, происходит ли это, реализовав метод dealloc на контроллере и установив там точку останова или вызов NSLog.

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

9 голосов
/ 03 июля 2011

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

У меня есть tableViewController, который является моим «базовым» контроллером, и затем я создаю подклассы этого контроллера. Я писал весь свой код в подпрограмме tableView:didSelectRowAtIndexPath в «базовом» классе. Полностью забывая, что по умолчанию эта подпрограмма также была создана (хотя и без кода, который что-либо делал) во всех моих подклассах. Поэтому, когда я запустил свое приложение, оно запустило версию кода подкласса, ничего не сделало и огорчило меня. Поэтому, разумеется, когда я удалил подпрограмму из подклассов, она использовала подпрограмму mt «base» и я в деле.

Я знаю. Не смейся Но, возможно, это спасет кого-то за час, который я потерял ...

8 голосов
/ 31 мая 2012

Даю на это 2 цента.

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

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

...