UITableView didSelectRowAtIndexPath: не вызывается при первом нажатии
у меня проблема с UITableView's
didSelectRowAtIndexPath
.
моя таблица настроена так, что при выборе строки она инициализирует новый контроллер представления и нажимает его.
при первом нажатии любой строки в таблице Метод не вызывается. Как только я выбираю другую строку, она начинает работать как обычно.
Я проверил это, установив точку останова на didSelectRowAtIndexPath
. При добавлении NSLog
к методу я вижу, что когда я выбираю вторую строку, которая, наконец, толкает новый view controller, я вижу, что в консоли одновременно появляются две инструкции журнала.
какие предложения?
12 ответов
также проверьте свойство selection вашего табличного представления в xib-файле. Один выбор " или "множественный выбор', как требуется.
Я испытал следующую проблему:
- первый кран в строке - > нет эффекта, нет выбора,никогда
- второе нажатие и следующее - > правильное поведение выбора,всегда
в моем случае моей ошибкой была проверка Show Selection on Touch
в интерфейсе строителя. Вы можете снять флажок в IB здесь:
надеюсь, что это поможет кому-то
Проверьте, установили ли вы распознаватели жестов в своем классе. Удаление жестов сработало для меня.
Я обсуждал даже публикацию этого ответа, потому что я думаю, что звезды выровнены, чтобы это проявилось.
У меня есть вариант этой проблемы и я проверил другие решения. В моем представлении таблицы он не обрабатывает самую последнюю строку моей таблицы при первом нажатии. Это подчеркивает его, но didSelectRowAtIndexPath
не называют. Все остальные строки работают нормально. Но если я включу TableView bounce, то это, похоже, решит проблему (но тогда вам придется иметь дело с 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
Это логическое значение, влияющее на то, доставляются ли касания в представление при распознавании жеста.