UITableView didSelectRowAtIndexPath: не вызывается при первом нажатии
у меня проблема с UITableView'sdidSelectRowAtIndexPath.
моя таблица настроена так, что когда я выбираю строку, она инициализирует новый контроллер представления и толкает его.
первый раз, когда я нажимаю любую строку в таблице, Метод не вызывается. Как только я выбираю другую строку, она начинает работать как обычно.
Я проверил это, установив точку останова на didSelectRowAtIndexPath. При добавлении NSLog к методу я вижу, что когда я выбираю вторую строку, которая, наконец, толкает новый View controller, я вижу, что в консоли одновременно появляются два оператора журнала.
какие предложения?
12 ответов:
также проверьте свойство выбора вашего табличного представления в файле xib. При необходимости используйте "одиночный выбор" или "множественный выбор".
У меня возникла следующая проблема:
- первый кран в строке- > нет эффекта, нет выбора,никогда
- второй кран и следующее - > правильное поведение выбора,всегда
в моем случае, моя ошибка была проверка
Show Selection on Touchв Interface Builder. Вы можете снять его в IB здесь:
надеюсь, что это поможет кому-то
проверьте, если вы установили какие-либо распознаватели жестов в вашем классе. Удаление жест работал для меня.
Я обсуждал даже публикацию этого ответа, потому что я думаю, что звезды вроде выровнены, чтобы это проявилось.
У меня есть вариация этой проблемы и проверили другие решения. В моем представлении таблицы он не обрабатывает самую последнюю строку моей таблицы при первом нажатии. Это подчеркивает его, но
didSelectRowAtIndexPathне называют. Все остальные строки работают нормально. Но если я включу TableView bounce, то это, похоже, решит проблему (но тогда вам придется иметь дело с a tableview bounce).
UITableViewCellSelectionStyleNone был установлен для ячейки, отображающей эту проблему (iOS 9 охота).
Я закончил тем, что позвонил
[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. Это довольно новый, так что это может быть исправлено позже.
функция didSelectRowAt не вызывалась в моем приложении в первом или втором касании... Я пытался решить проблему не мог найти любое решение. Но вдруг я узнал, что я использую вид.изменение цвета анимации... Делегат метод не вызывался, пока анимация сохраняется
SWIFT 3
ни один из других ответов не работал в моем случае, что исправило это для меня было:
tableView.delaysContentTouches = false
Если вы установили какой-либо UITapGestureRecognizer в своем классе, вы можете добавить эту строку в свой didSelectRowAtIndexPath:
[tableView deselectRowAtIndexPath:indexPath animated:NO];это сработало для меня.
эта проблема возникает также при работе с распознавателем жестов в tableView в этом случае вам не нужно их удалять, вам нужно только убедиться, что ваше свойство жеста
cancelsTouchesInView = falseЭто логическое значение, влияющее на то, доставляются ли прикосновения к виду при распознавании жеста.

Comments