无法在iOS 13中使用可扩散数据源通过TableView滑动以删除

Dog*_*fee 4 uitableview swift ios13 diffabledatasource

我正在更新,UITableViewController以使用新的UITableViewDiffableDataSource,但所有工作都正常,但要滑动删除即可。

这是我如何使用滑动删除的示例

func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {

   let lockedAction = UIContextualAction(style: .normal, title: "TEST") { (_, _, completion) in
       print("tapped....")
       completion(true)
   }

    return UISwipeActionsConfiguration(actions: [lockedAction])
}
Run Code Online (Sandbox Code Playgroud)

但这在UITableViewController具有UITableViewDiffableDataSource

没有滑动,方法中的断点也不会被调用

我以为这是一个Beta错误,但是我更新到了Xcode 11 GM,并且发生了同样的事情。

感谢您的任何建议

Ash*_*ron 8

您应该子类化UITableViewDiffableDataSource并返回true要在其中启用此功能的行:

override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool
Run Code Online (Sandbox Code Playgroud)


Ale*_*son 5

的确,文档tableView(_:canEditRowAt:)说:

该方法允许数据源将单个行排除在可编辑范围之外。可编辑的行在其单元格中显示插入或删除控件。如果未实现此方法,则假定所有行都是可编辑的

但是UITableViewDiffableDataSource确实实现了该方法,并且它似乎false默认返回(尽管我在任何地方都找不到该文档)。

实际上,来自WWDC 2019会议215和220 的示例代码实现了一个自定义UITableViewDiffableDataSource子类,如下所示:

class DataSource: UITableViewDiffableDataSource<SectionType, ItemType> {
    // ... 
    override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
        return true
    }
    // ...
}
Run Code Online (Sandbox Code Playgroud)