Действие UITableViewRowAction запускается при смахивании, а не при нажатии - PullRequest
0 голосов
/ 14 января 2019

Я не уверен, что правильно понял, документация немного смущает, но, учитывая следующий код в теле делегата UITableView:

    func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
        return true
    }

    func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {

        let action = UITableViewRowAction(style: UITableViewRowAction.Style.normal,
                                          title: "Do Something!") { (_, indexPath) in
                                            self.doSomething()
                                            }
        return [action]
    }

вызов метода doSomething() выполняется в симуляторе по завершении действия смахивания влево рядом с нажатием на "Do Something!" кнопка. Я не хочу, чтобы звонок был выполнен дважды. Что-то не так с моей конфигурацией или я не понял цели UITableViewRowAction?

TLDR: я хочу, чтобы обратный вызов действия смахивания срабатывал только при нажатии на отображаемую кнопку.

Спасибо.

1 Ответ

0 голосов
/ 14 января 2019

Чтобы предотвратить такое поведение, вам нужна реализация новой iOS.

func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
let myAction = UIContextualAction(style: .someStyle, title: "Some tilte") { (action, sourceView, completionHandler) in
    print("action has been triggered")
    completionHandler(true)
}
let preventSwipeFullAction = UISwipeActionsConfiguration(actions: [myAction ])
preventSwipeFullAction .performsFirstActionWithFullSwipe = false // set false to disable full swipe action
return preventSwipeFullAction 
}

TableView Trailing Swipe Action

Помните, tableView.isEditing должно быть false, чтобы можно было вызывать trailingSwipeActionsConfigurationForRowAt.

completionHandler(true) // передача истинного разрешения вызова обработчика включения

...