我正在尝试在UITableView中使用新的UITableViewDiffableDataSource来设置一个包含部分的UITableViewController。
除了设置节标题外,一切看起来都很好。
根据苹果的文档,UITableViewDiffableDataSource符合UITableViewDataSource,所以我希望这是可能的。
我试过:
但是这两种方式都没有结果(Xcode 11和iOS13 beta 3)。
当前是否有使用UITableViewDiffableDataSource设置节标题的方法?
发布于 2019-08-18 18:09:57
更新:从beta 8开始,您现在可以在一个tableView(_ tableView:, titleForHeaderInSection section:)子类中实现UITableViewDiffableDataSource,并且它可以正常工作。
在数据源中填充标题标题的默认行为总是有些奇怪。对于UITableViewDiffableDataSource,苹果似乎承认了这一点,因为它没有提供默认的基于字符串的行为;然而,UITableViewDelegate方法仍然像以前一样工作。通过初始化和返回具有所需节标题的UILabel来实现UILabel,并实现tableView(_:heightForHeaderInSection:)来管理所需的高度。
发布于 2019-08-26 10:43:35
提供@particleman解释的代码示例。
struct User: Hashable {
var name: String
}
enum UserSection: String {
case platinum = "Platinum Tier"
case gold = "Gold Tier"
case silver = "Silver Tier"
}
class UserTableViewDiffibleDataSource: UITableViewDiffableDataSource<UserSection, User> {
override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
guard let user = self.itemIdentifier(for: IndexPath(item: 0, section: section)) else { return nil }
return self.snapshot().sectionIdentifier(containingItem: user)?.rawValue
}
}发布于 2022-02-02 16:02:53
请允许我提出一个相当灵活的普遍解决办法:
声明子类:
class StringConvertibleSectionTableViewDiffibleDataSource<UserSection: Hashable, User: Hashable>: UITableViewDiffableDataSource<UserSection, User> where UserSection: CustomStringConvertible {
override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return sectionIdentifier(for: section)?.description
}
}用法示例:
class ComitsListViewController: UITableViewController {
private var diffableDataSource = StringConvertibleSectionTableViewDiffibleDataSource<String, Commit>(tableView: tableView) { (tableView, indexPath, commit) -> UITableViewCell? in
let cell = tableView.dequeueReusableCell(withIdentifier: "Commit", for: indexPath)
cell.configure(with: commit)
return cell
}
}你不仅仅局限于String思想。您可以通过为您的节类型实现description var of CustomStringConvertible协议来控制显示什么作为节标题。
https://stackoverflow.com/questions/57076548
复制相似问题