UITableView didSelectRowAtIndexPath: не вызывается при первом нажатии - PullRequest
348 голосов
/ 21 января 2010

У меня проблема с UITableView's didSelectRowAtIndexPath.

Моя таблица настроена так, что когда я выбираю строку, она инициализирует новый контроллер представления и толкает его.

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

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

Есть предложения?

Ответы [ 14 ]

1336 голосов
/ 21 января 2010

Любой шанс, что вы случайно набрали, сделал De selectRowAtIndexPath?

24 голосов
/ 29 ноября 2012

Также проверьте свойство выбора вашего табличного представления в xib-файле. При необходимости используйте «Один выбор» или «Многократный выбор».

17 голосов
/ 23 января 2015

У меня возникла следующая проблема:

  • первое нажатие в строке -> без эффекта, без выбора, никогда
  • второе нажатие и последующее -> правильное поведение выбора, всегда

В моем случае моей ошибкой была проверка Show Selection on Touch в Интерфейсном Разработчике. Вы можете снять галочку в IB здесь:

enter image description here

Надеюсь, что кому-то поможет

11 голосов
/ 12 октября 2015

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

6 голосов
/ 01 февраля 2014

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

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

4 голосов
/ 20 июля 2016

UITableViewCellSelectionStyleNone был установлен для ячейки, отображающей эту проблему (Ios9).

В итоге я позвонил

[tableView deselectRowAtIndexPath:indexPath animated:NO];

первым делом в

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

, что не то же самое, но достаточно хорошо. заставляет задуматься, что за поломка стола приносит ios10.

1 голос
/ 09 июля 2018

эта проблема также возникает, когда вы работаете с распознавателем жестов в tableView, в этом случае вам не нужно удалять их, вам нужно только убедиться, что ваше свойство жеста cancelsTouchesInView = false это логическое значение, влияющее на то, касается доставляются в представление, когда жест распознается.

1 голос
/ 19 января 2018

Если вы установили какой-либо UITapGestureRecognizer в своем классе, вы можете добавить эту строку в вашем didSelectRowAtIndexPath:

[tableView deselectRowAtIndexPath:indexPath animated:NO];

Это сработало для меня.

1 голос
/ 06 октября 2016

SWIFT 3

Если вы работаете со Swift 3 в классе, который не является UITableViewController, и вы используете UITableViewDelegate, то вам может понадобиться использовать заголовок метода:

@objc(tableView:didSelectRowAtIndexPath:) func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){...}

Это сработало для меня, хотя я только что перенес свой проект в Swift 3. Он довольно новый, поэтому это можно исправить позже.

1 голос
/ 20 ноября 2015

SWIFT 2

Убедитесь, что у вас установлено значение true:

self.tableView.allowsSelection = true

Поставьте это над своим правом после viewDidLoad() и перед super.viewDidLoad()

...