新しい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])
}
しかし、これはUITableViewController
があるUITableViewDiffableDataSource
では機能しません
スワイプはなく、メソッド内のブレークポイントも呼び出されません
これはベータ版のバグだと思っていましたが、Xcode 11に更新しましたGMそして同じことが起こっています。
アドバイスをありがとう
これを有効にしたい行のUITableViewDiffableDataSource
をサブクラス化してtrue
を返す必要があります。
override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool
tableView(_:canEditRowAt:)
のドキュメントが次のように言っているのは事実です。
このメソッドにより、データソースは個々の行を編集可能として扱われることから除外できます。編集可能な行は、セルに挿入または削除のコントロールを表示します。このメソッドが実装されていない場合、すべての行が編集可能であると見なされます
ただし、UITableViewDiffableDataSource
、doesはそのメソッドを実装しており、デフォルトでfalse
を返すようです(ただし、それはどこにでも文書化されています)。
実際、WWDC 2019セッション215および220の サンプルコード は、次のようなカスタムUITableViewDiffableDataSource
サブクラスを実装しています。
class DataSource: UITableViewDiffableDataSource<SectionType, ItemType> {
// ...
override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
return true
}
// ...
}