UITableView: метод «didDeselectCell» не вызывается, хотя ячейка отменяется

#ios #swift #uitableview #gesture #delete-row

#iOS #swift #uitableview #жест #удалить строку

Вопрос:

Я использую UITableView с включенной анимацией «проведите пальцем для удаления».

Мне нужно отслеживать didDeselectCell метод, чтобы включить / отключить некоторые элементы управления в приложении.

Однако, если пользователь инициирует жест «проведите пальцем для удаления», открывает кнопку «Удалить», а затем отменяет жест (без завершения), ячейка отменяется и событие не регистрируется.

Два вопроса:

  1. Возможно ли включить didDeselectCell запуск события и в этом случае?
  2. Как можно получить уведомление о том, что ячейка была автоматически отменена с помощью «проведите пальцем для удаления»?

Ответ №1:

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

НЕ вызывается при начале редактирования или при отмене выбора с помощью кода с помощью .deselectRow(at: ... or .selectRow(at: ... и т.д.

Одним из вариантов было бы реализовать willBeginEditingRowAt :

 func tableView(_ tableView: UITableView, willBeginEditingRowAt indexPath: IndexPath) {
    if let iPath = tableView.indexPathForSelectedRow {
        print("the row at (iPath) was selected...")
        // do stuff for that row
    }
}
  

В зависимости от того, что вам нужно сделать, это может сработать, а может и не сработать в вашем случае.

Комментарии:

1. Спасибо, это тот ответ, который я искал. Хотя при вызове этого метода в tableview все еще выделяется строка (которая будет отменена после завершения работы этого метода). К сожалению, нет метода с подписью, который вызывался бы после начала редактирования, т. е. didBeginEditing , но все же предложенный вами метод работает и в моем случае.

2. @RichardTopchiy — да, кажется странным, что нет уведомления. Если это работает в вашем случае, отлично. Другим возможным вариантом было бы реализовать override func setSelected(_ selected: Bool, animated: Bool) {} в вашей ячейке и использовать это для запуска изменения вашего макета (либо внутри самого класса cell, либо через делегирование или закрытие).