Ответ 1
Любая случайность, которую вы случайно набрали, сделала De selectRowAtIndexPath?
У меня проблема с UITableView's
didSelectRowAtIndexPath
.
Моя таблица настроена так, что, когда я выбираю строку, она инициализирует новый контроллер представления и выталкивает его.
При первом нажатии любой строки в таблице метод не вызывается. Когда я выберу другую строку, она начнет работать как обычно.
Я проверил это, установив точку останова на didSelectRowAtIndexPath
. При добавлении метода NSLog
к этому методу я вижу, что, когда я выбираю вторую строку, которая, наконец, подталкивает новый контроллер представлений, я вижу одновременно два оператора журнала в консоли.
Любые предложения?
Любая случайность, которую вы случайно набрали, сделала De selectRowAtIndexPath?
Также проверьте свойство выбора вида таблицы в файле xib. Используйте "Single Selection" или "Multiple Selection" по мере необходимости.
У меня возникла следующая проблема:
В моем случае моя ошибка заключалась в проверке Show Selection on Touch
в Interface Builder. Вы можете снять его в IB здесь:
Надеюсь, что кто-то поможет
Проверить Если вы установили распознаватели Gesture в своем классе. Удаление жестов сработало для меня.
Я обсуждал даже публикацию этого ответа, потому что я думаю, что звезды выровнены, чтобы это проявилось.
У меня есть вариация этой проблемы и проверили другие решения. На моем столе он не обрабатывает самую последнюю строку моей таблицы при первом касании. Он выделяет его, но didSelectRowAtIndexPath
не вызывается. Все остальные строки работают нормально. Но если я вернусь к откату таблицы, то, похоже, он решает проблему (но тогда вам приходится иметь дело с отказом таблицы).
UITableViewCellSelectionStyleNone был установлен для ячейки, отображающей эту проблему (Ios9).
Я позвонил
[tableView deselectRowAtIndexPath:indexPath animated:NO];
первая вещь в
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
что не то же самое, но достаточно хорошо. заставляет меня задаться вопросом, что приводит к разрушению стола ios10.
SWIFT 2
Убедитесь, что для этого параметра установлено значение true:
self.tableView.allowsSelection = true
Поместите это над вашим правом после viewDidLoad()
и перед super.viewDidLoad()
SWIFT 3
Если вы работаете с Swift 3 в классе, который не является UITableViewController
, и вы используете UITableViewDelegate
, вам может понадобиться использовать заголовок метода:
@objc(tableView:didSelectRowAtIndexPath:) func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){...}
Это сработало для меня, хотя я только что перенесла свой проект на Swift 3. Он довольно новый, так что это может быть исправлено позже.
Если вы установили какой-либо UITapGestureRecognizer в своем классе, вы можете добавить эту строку в свой didSelectRowAtIndexPath:
[tableView deselectRowAtIndexPath:indexPath animated:NO];
Это сработало для меня.
эта проблема также возникает, когда вы работаете с распознавателем жестов в tableView, в этом случае вам не нужно удалять их, вам нужно только убедиться, что ваше свойство жеста cancelsTouchesInView = false
- это логическое значение, влияющее на то, доставляются ли касания вид, когда жест распознается.
Функция didSelectRowAt
не была вызвана в моем приложении при первом или втором нажатии... Я пытался решить проблему, не мог найти никакого решения. Но вдруг я узнал, что я использовал изменение цвета view.animation... Метод Delegate
не вызывался, пока сохранялась анимация
SWIFT 3
Ни один из других ответов не работал в моем случае, что исправило это для меня:
tableView.delaysContentTouches = false
В моем случае у меня был заголовок раздела UITableView с распознавателем жестов. Когда заголовок коснулся, он должен вставить несколько строк в этот раздел и анимировать вставку (например, раздел развернуть/свернуть). При первом раскрытии и нажатии метод делегата didSelectRow не был запущен. Для дальнейших нажатий и действий по расширению/сворачиванию все работало как положено.
В ответе @Ayoub Nouri я установил false для CancelsTouchesInView, и это решило проблему. tapGestureRecognizer?.cancelsTouchesInView = false
Swift 4.2
Отключение "Задержки касания" в инспекторе атрибутов решило проблему.
После этого щелчки сглаживаются и didSelectRowAt срабатывает немедленно.
Что мне помогло, так это начать набирать "didSelect...", а затем дать автозамене заполнить все остальное. Видимо, некоторые детали моего синтаксиса были вялыми. Как уже говорили другие, используйте IDE !!