UITableView didSelectRowAtIndexPath: не вызывается при первом нажатии



у меня проблема с UITableView'sdidSelectRowAtIndexPath.



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



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



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



какие предложения?

613   12  

12 ответов:

есть шанс, что вы случайно набрали сделал DeselectRowAtIndexPath?

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

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

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

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

enter image description here

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

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

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

У меня есть вариация этой проблемы и проверили другие решения. В моем представлении таблицы он не обрабатывает самую последнюю строку моей таблицы при первом нажатии. Это подчеркивает его, но 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

    Ничего не найдено.