Swift - 如何使用枚举为 UITableView 制作自定义标题部分?

Posted

技术标签:

【中文标题】Swift - 如何使用枚举为 UITableView 制作自定义标题部分?【英文标题】:Swift - how to make custom header sections for UITableView using enum? 【发布时间】:2020-09-23 07:34:35 【问题描述】:

大家好,在我的 tableView 类中,我有以下枚举

enum tabelSecion  
    case action 
    case drama 
    case comedy

我需要使用这个枚举来拥有 3 个不同的节标题。我还创建了一个笔尖来表示一个自定义 sectionHeaderCell,它里面只有一个标签。我怎样才能显示部分标题? 感谢您的帮助

【问题讨论】:

我猜this 可以帮助您并阅读 cmets。我的意思是this 【参考方案1】:

您可以通过使用动态 var SectionTitle 扩展您的枚举来做到这一点。

enum TabelSection: Int, CaseIterable  
    case action 
    case drama 
    case comedy

    var sectionTitle: String 
        switch self 
        case action: return "Action"
        ...
        
    

通过让你枚举一个 Int,就可以用 rawValue 初始化它。初始化它的 rawValue 是您从 TableView 方法中获得的部分。

CaseIterable 也很不错,因此您可以从中获取 numberOfSections 方法的案例数(=sections)。

override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? 
    return TabelSection(rawValue: section)?.sectionTitle


编辑: 要为 tableView 的每个部分显示 headerView,请将 TableViewstyle 更改为 Grouped

在您的代码中,只需为 tableView 提供正确数量的部分。

override func numberOfSections(in tableView: UITableView) -> Int 
    return TabelSection.allCases.count

如果你真的需要一个自定义的 HeaderView 可以使用下面的方法来实现

override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? 
    ...

【讨论】:

感谢您的帮助,但我应该如何让内部只有一个标签的 customHeaderSectionCell 出队? 因为部分标题单元格的标签需要更新为“Action”、“Drama”... 您不需要自定义单元格。 headerView 已经提供了一个标签。覆盖titleForHeaderInSection 允许您配置为每个部分显示哪些文本

以上是关于Swift - 如何使用枚举为 UITableView 制作自定义标题部分?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用通知将字符串数据从 swift 传递到目标 c 类

如何获得 Swift 枚举的计数?

Swift枚举使用String值获取Int Enum的值

Swift 4.2 - 如何在枚举函数中使用警报?

如何在 Objective-C 中使用 Swift 字符串枚举?

Swift 3 - 如何使用枚举原始值作为 NSNotification.Name?