UITableView, UISwipeActionsConfiguration, UIContextualAction - pullView не находится в иерархии представления. Это ошибка UIKit - PullRequest
0 голосов
/ 08 января 2020

У меня есть UITableView с действием смахивания, которое при смахивании: A) отображает пустую / пустую область, где должна отображаться кнопка действия смахивания; и B) следующая строка зарегистрирована к консоли отладки в XCode:

[Утверждение] pullView не находится в иерархии представления. Это ошибка UIKit.

На сегодняшний день для поиска по названию этого вопроса нет результатов Google.

1 Ответ

2 голосов
/ 08 января 2020

Оказывается, виновником было следующее

override func setEditing(_ editing: Bool, animated: Bool) {
    super.setEditing(editing, animated: animated)

    if !editing {
        rowSelectionState.removeAll()
        loadData()
    }
    refreshView()
}

В частности, вызов refreshView(), который содержит вызов tableView.reloadData(), должен быть внутри блока if !editing { ... }. Если нет, то когда инициируется действие смахивания, действие смахивания вызывает setEditMode(true, ...), вызывая, таким образом, tableView.reloadData(), что портит способность UISwipeActionsConfiguration правильно отображаться.

Таким образом, вышеприведенное должно выглядеть так:

override func setEditing(_ editing: Bool, animated: Bool) {
    super.setEditing(editing, animated: animated)

    if !editing {
        rowSelectionState.removeAll()
        loadData()
        refreshView()
    }
}
...