У меня проблема с UITableView's
didSelectRowAtIndexPath
.
Моя таблица настроена так, что когда я выбираю строку, она инициализирует новый контроллер представления и толкает его.
При первом нажатии любой строки в таблице метод не вызывается. Как только я выбираю другую строку, она начинает работать как обычно.
Я проверил это, установив точку останова didSelectRowAtIndexPath
. При добавлении NSLog
к методу я вижу, что когда я выбираю вторую строку, которая, наконец, выдвигает новый контроллер представления, я вижу, что в консоли одновременно появляются два оператора журнала.
Какие-либо предложения?
uitableview
cocoa-touch
uikit
didselectrowatindexpath
Марк Адамс
источник
источник
tableView:didSelectRowAtIndexPath:
?Ответы:
Есть ли шанс, что вы случайно набрали De selectRowAtIndexPath?
источник
Также проверьте свойство selection вашего табличного представления в xib-файле. При необходимости используйте «Отдельный выбор» или «Многократный выбор».
источник
У меня возникла следующая проблема:
В моем случае моя ошибка была проверка
Show Selection on Touch
в Интерфейсном Разработчике. Вы можете снять галочку в IB здесь:Надеюсь, что это помогает кому-то
источник
Проверьте, установили ли вы какие-либо распознаватели жестов в своем классе. Удаление жеста сработало для меня.
источник
Я обсуждал даже публикацию этого ответа, потому что я думаю, что звезды как бы выровнены, чтобы это проявилось.
У меня есть вариант этой проблемы и проверил другие решения. В моем представлении таблицы это не обрабатывает самую последнюю строку моей таблицы при первом нажатии. Это подчеркивает это, но
didSelectRowAtIndexPath
не вызывается. Все остальные ряды работают нормально. Но если я включаю отскок в виде таблицы, то это, похоже, решит проблему (но тогда придется иметь дело с отскоком в виде таблицы).источник
UITableViewCellSelectionStyleNone был установлен для ячейки, отображающей эту проблему (ios9).
Я закончил звонить
первым делом в
что не то же самое, но достаточно хорошо. заставляет задуматься, что за поломка стола приносит ios10.
источник
setSelected
но пока пользователь удерживает ячейку, появляется выбор, который не приемлемSWIFT 2
Убедитесь, что у вас установлено значение true:
self.tableView.allowsSelection = true
Поместите это выше вашего сразу после
viewDidLoad()
и доsuper.viewDidLoad()
источник
SWIFT 3
Если вы работаете со Swift 3 в классе, который не является классом, который
UITableViewController
вы используетеUITableViewDelegate
, то вам может понадобиться использовать заголовок метода:Это сработало для меня, хотя я только что перенес свой проект в Swift 3. Он довольно новый, так что это может быть исправлено позже.
источник
Если вы установили какой-либо UITapGestureRecognizer в своем классе, вы можете добавить эту строку в didSelectRowAtIndexPath:
Это сработало для меня.
источник
эта проблема также возникает, когда вы работаете с распознавателем жестов в tableView, в этом случае вам не нужно удалять их, вам нужно только убедиться, что ваше свойство жеста
cancelsTouchesInView = false
является логическим значением, влияющим на то, доставляются ли касания в представление, когда жест признается.источник
SWIFT 3
Ни один из других ответов не работал в моем случае, что исправило это для меня:
tableView.delaysContentTouches = false
источник
didSelectRowAt
функция не была вызвана в моем приложении при первом или втором нажатии ... Я пытался решить проблему, не мог найти решение. Но вдруг я узнал, что я использовал изменение цвета view.animation ...Delegate
метод не вызывался, пока анимация сохраняласьисточник
В моем случае у меня был заголовок раздела UITableView с распознавателем жестов. Когда заголовок коснулся, он должен вставить несколько строк в этот раздел и анимировать вставку (например, раздел развернуть / свернуть). При первом раскрытии и нажатии метод делегата didSelectRow не был запущен. Для дальнейших нажатий и действий по расширению / сворачиванию все работало как положено.
В ответе @Ayoub Nouri я установил false для cancellsTouchesInView, и это решило проблему. tapGestureRecognizer? .cancelsTouchesInView = false
источник
Swift 4.2
Отключение «Задержки касания» в инспекторе атрибутов решило проблему.
После этого щелчки сглаживаются и didSelectRowAt срабатывает немедленно.
источник
Что мне помогло, так это начать набирать «didSelect ...», а затем дать автозамене заполнить все остальное. Видимо, некоторые детали моего синтаксиса были вялыми. Как уже говорили другие, используйте IDE !!
источник