Мне удалось решить эту проблему, вызвав «реальный» режим редактирования по-другому.
На моем UITableViewController
:
class MyTableViewController: UITableViewController {
var realEditMode: Bool = false
func setRealEditing(_ editing: Bool) {
realEditMode = editing
setEditing(realEditMode, animated: true)
}
// See Note 1 below
@available(iOS 11.0, *)
override func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration {
guard let item = itemForIndexPath(indexPath) else {
return UISwipeActionsConfiguration(actions: [])
}
if realEditMode {
return UISwipeActionsConfiguration(actions: [
buildActionConfiguration(.delete, fromIndexPath: indexPath)
])
} else {
return UISwipeActionsConfiguration(actions: [
buildActionConfiguration(.read, fromIndexPath: indexPath)
])
}
}
@available(iOS 11.0, *)
func buildActionConfiguration(_ action: MyCellActionEnum, fromIndexPath indexPath: IndexPath) -> UIContextualAction {
// logic to build `UIContextualAction`
}
}
И в моем UITableViewCell
проверьте, если *Флаг 1008 * устанавливается путем ручного запуска или запуска редактирования пролистывания:
class MyCell: UITableViewCell {
var myTableViewController: MyTableViewController?
override func setEditing(_ editing: Bool, animated: Bool) {
if editing && !(myTableViewController?.realEditMode ?? true) {
return
}
super.setEditing(editing, animated: animated)
}
}
Затем вместо кнопок редактирования в пользовательском интерфейсе я изменил setEditing(true/false, animated: true)
на setRealEditing(true/false)
.
Примечание 1
Одна проблема, которую я обнаружил, заключалась в том, что при использовании trailingSwipeActionsConfigurationForRowAt
кнопка удаления (⛔️) больше не работала.Нажатие на него не вызывало подтверждение.
Я обнаружил, что должен существовать trailingSwipeActionsConfigurationForRowAt
с UIContextualAction
, который был инициализирован с UIContextualAction(style: .destructive)
(т.е. имел деструктивный стиль).Это элемент, который затем используется для отображения подтверждения удаления.
Однако я не хотел, чтобы этот элемент был виден, когда использовались обычные действия смахивания, поэтому отображать его можно только в одном «режиме реального редактирования». Iиспользовал флаг realEditMode
.
Это сработало для меня и не выглядело слишком глупо.Если появится что-то более официальное, я более чем рад изменить принятый ответ.