#ios #swift #uitableview #gesture #delete-row
#iOS #swift #uitableview #жест #удалить строку
Вопрос:
Я использую UITableView с включенной анимацией «проведите пальцем для удаления».
Мне нужно отслеживать didDeselectCell
метод, чтобы включить / отключить некоторые элементы управления в приложении.
Однако, если пользователь инициирует жест «проведите пальцем для удаления», открывает кнопку «Удалить», а затем отменяет жест (без завершения), ячейка отменяется и событие не регистрируется.
Два вопроса:
- Возможно ли включить
didDeselectCell
запуск события и в этом случае? - Как можно получить уведомление о том, что ячейка была автоматически отменена с помощью «проведите пальцем для удаления»?
Ответ №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, либо через делегирование или закрытие).