Я создаю приложение, которое должно использовать завершающие действия для UITableView, я настроил trailingSwipeActionsConfigurationForRowAt
следующим образом:
func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
if indexPath == IndexPath(row: 0, section: 0) {
return nil
}
let deleteAction = UIContextualAction(style: .normal, title: "") { [weak self] (_, _, completion) in
self?.onDeleteActionClicked(at: indexPath)
completion(true)
}
deleteAction.backgroundColor = .black
deleteAction.image = UIImage.sfSymbol(.trash, tintColor: .white)
let editAction = UIContextualAction(style: .normal, title: "") { [weak self] (_, _, completion) in
self?.onEditActionClicked(at: indexPath)
completion(true)
}
editAction.backgroundColor = .white
editAction.image = UIImage.sfSymbol(.edit)
let configuration = UISwipeActionsConfiguration(actions: [deleteAction, editAction])
configuration.performsFirstActionWithFullSwipe = false
return configuration
}
Эта реализация работает на физическом устройстве и других симуляторах под управлением iOS 16.1.
Делегат установлен правильно, поскольку вызывается didSelectRowAt
, в ячейки не добавляются распознаватели жестов, и, похоже, он нормально работает с симуляторами под управлением iOS 16.1 и физическими устройствами с той же версией iOS.
@HangarRash метод не вызывается, поэтому я не вижу никакого поведения «пролистывания»
Поэтому, очевидно, чтобы это работало до iOS 15, вам необходимо реализовать следующий метод в DataSource:
func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
// Custom logic goes in here
}
Дайте определение «не работает». Что на самом деле происходит при запуске на симуляторе iOS 14? Вызывается этот метод делегата или нет? Если звонят, что происходит, когда вы проводите пальцем по ячейке?