UITableViewDiffableDataSource:如何设置节标题?
我正在尝试在UITableViewDiffableDataSource:如何设置节标题?,uitableview,uikit,ios13,Uitableview,Uikit,Ios13,我正在尝试在UITableViewController中使用新的UITableViewDiffableDataSource设置一个UITableView分区 除了设置节头标题外,一切似乎都很好 根据苹果的文档,UITableViewDiffableDataSource符合UITableViewDataSource,所以我希望这是可能的 我试过: 重写tableView(tableView:,标题ForHeaderInSection:) 在UITableViewController类中 子类化UI
UITableViewController
中使用新的UITableViewDiffableDataSource
设置一个UITableView
分区
除了设置节头标题外,一切似乎都很好
根据苹果的文档,UITableViewDiffableDataSource
符合UITableViewDataSource
,所以我希望这是可能的
我试过:
当前是否有一种使用
UITableViewDiffableDataSource
设置节头标题的方法?更新:从beta 8开始,您现在可以在UITableViewDiffableDataSource子类中实现tableView(uTableView:,titleForHeaderInSection:)
,并且工作正常
填充标题的默认行为在数据源中总是有点奇怪。对于UITableViewDiffableDataSource,苹果似乎承认这一点,因为它没有提供默认的基于字符串的行为;但是,UITableViewDelegate方法仍像以前一样工作。通过初始化并返回带有所需章节标题的UILabel,实现
表格视图(uu:viewForHeaderInSection:)
,并实现表格视图(u:heightForHeaderInSection:)
以管理所需的高度工作。提供了@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
}
}
struct用户:可散列{
变量名称:String
}
枚举用户节:字符串{
案例铂金=“铂金层”
case gold=“黄金层”
case silver=“银层”
}
类UserTableViewDiffibleDataSource:UITableViewDiffibleDataSource{
重写func tableView(tableView:UITableView,titleForHeaderInSection:Int)->String{
guard let user=self.itemIdentifier(for:indepath(item:0,section:section))else{return nil}
返回self.snapshot().sectionIdentifier(包含项:用户)?.rawValue
}
}
将self.dataSource
初始化为UITableViewDiffableDataSource
(将自身设置为tableView.dataSource
)后,将tableView.dataSource
设置回self,即UITableViewController
子类。现在,在您的numberOfSectionsInTableView
和numberofrowsinssection
方法中,将这些转发到self.dataSource
并返回其信息(这是合成模式)。现在,您的UITableViewController
只实现了正常的部分标题,因为它是表的数据源
我认为,如果已经设置了数据源,则不应将其自身设置为数据源,但我猜他们设计的数据源以最不容易出错的方式工作,因为将UITableViewController
添加到情节提要中,其已设置
如果这样做,那么在早期的iOS 13 Beta中该类没有打开是有道理的。我只是使用了
snapshot().sectionIdentifiers[section].rawValue
我的目标是iOS 13并在Xcode 11.4.1中开发,不幸的是它看起来像是表视图(\uquo:viewForHeaderInSection:)
方法在UITableViewDiffableDataSource的扩展中不可重写
我在苹果开发者论坛上发布了一个关于此的问题,希望苹果工程师能看到。因此,结果是表视图(uu:viewForHeaderInSection:)
方法由UITableViewDelegate
提供,而不是UITableViewDataSource
。我的错!