tableView(canEditRowAt) 不再与 tableViewDiffableDataSource 一起工作
tableView(canEditRowAt) no longer working with tableViewDiffableDataSource
我创建了一个相当简单的 tableView 来为项目模型选择类别。昨天一切正常。今天我一直在尝试将 tableView 数据源切换到 UITableViewDiffableDataSource
,因为我想把我的头绕在 API 周围。我备份了整个 tableView,运行 除了我不能再编辑我的行!
setEditing
逻辑工作,因为当我点击导航栏中的编辑按钮时 newCategoryButton
被禁用,当我再次点击它时它被启用。但是,我永远无法通过滑动来删除,并且在编辑模式下删除图标不会显示在我的行旁边。
我尝试删除 setEditing
,清空 commit editingStyle
并简单地将 canEditRow
设置为 return true
,但仍然没有。
如有任何帮助,我们将不胜感激。谢谢!
override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
let section = dataSource.snapshot().sectionIdentifiers[indexPath.section]
if section == .noneSelected {
return false
} else {
return true
}
}
override func setEditing(_ editing: Bool, animated: Bool) {
super.setEditing(editing, animated: true)
if editing == true {
newCategoryButton.isEnabled = false
} else {
newCategoryButton.isEnabled = true
}
}
override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == .delete {
categories.remove(at: indexPath.row)
tableView.deleteRows(at: [indexPath], with: .automatic)
}
}
override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool {
return true
}
override func tableView(_ tableView: UITableView, moveRowAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath) {
let movedCategory = categories.remove(at: sourceIndexPath.row)
categories.insert(movedCategory, at: destinationIndexPath.row)
}
screenShot after edit button is tapped
麻烦的是canEditRowAt
是一个数据源方法。您(视图控制器)现在不是数据源;可区分的数据源是。您需要在 diffable 数据源 中实现此方法 。这通常是通过 subclassing diffable 数据源 class 来完成的,这样您就可以覆盖此方法。否则,diffable 数据源只是 returns 它的默认值 — 即 false
,这就是您目前无法编辑任何行的原因。
我创建了一个相当简单的 tableView 来为项目模型选择类别。昨天一切正常。今天我一直在尝试将 tableView 数据源切换到 UITableViewDiffableDataSource
,因为我想把我的头绕在 API 周围。我备份了整个 tableView,运行 除了我不能再编辑我的行!
setEditing
逻辑工作,因为当我点击导航栏中的编辑按钮时 newCategoryButton
被禁用,当我再次点击它时它被启用。但是,我永远无法通过滑动来删除,并且在编辑模式下删除图标不会显示在我的行旁边。
我尝试删除 setEditing
,清空 commit editingStyle
并简单地将 canEditRow
设置为 return true
,但仍然没有。
如有任何帮助,我们将不胜感激。谢谢!
override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
let section = dataSource.snapshot().sectionIdentifiers[indexPath.section]
if section == .noneSelected {
return false
} else {
return true
}
}
override func setEditing(_ editing: Bool, animated: Bool) {
super.setEditing(editing, animated: true)
if editing == true {
newCategoryButton.isEnabled = false
} else {
newCategoryButton.isEnabled = true
}
}
override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == .delete {
categories.remove(at: indexPath.row)
tableView.deleteRows(at: [indexPath], with: .automatic)
}
}
override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool {
return true
}
override func tableView(_ tableView: UITableView, moveRowAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath) {
let movedCategory = categories.remove(at: sourceIndexPath.row)
categories.insert(movedCategory, at: destinationIndexPath.row)
}
screenShot after edit button is tapped
麻烦的是canEditRowAt
是一个数据源方法。您(视图控制器)现在不是数据源;可区分的数据源是。您需要在 diffable 数据源 中实现此方法 。这通常是通过 subclassing diffable 数据源 class 来完成的,这样您就可以覆盖此方法。否则,diffable 数据源只是 returns 它的默认值 — 即 false
,这就是您目前无法编辑任何行的原因。