tableView:viewForHeaderInSection: 如何准确工作以及如何动态自定义此视图

Posted

技术标签:

【中文标题】tableView:viewForHeaderInSection: 如何准确工作以及如何动态自定义此视图【英文标题】:How does tableView:viewForHeaderInSection: works exactly and how to customize this view dynamically 【发布时间】:2016-07-07 20:35:43 【问题描述】:

我正在为 UITableView 的部分设置标题,一切正常:

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

    let headerView = MyCustomHeaderView()
    headerView.backgroundColor = UIColor.blueColor()
    return headerView

每个部分的标题都是蓝色的,正如我所期望的那样。

现在,我想在 UITableView 滚动时更改此颜色,因此我在 UITableView 扩展中实现了此方法:

extension UITableView

    func setHeadersColor(color: UIColor)
    
        guard let delegate = self.delegate
            else return
        guard delegate.respondsToSelector(#selector(UITableViewDelegate.tableView(_:viewForHeaderInSection:)))
            else return

        for i in 0...self.numberOfSections
        
            if let header = delegate.tableView!(self, viewForHeaderInSection: i) as? MyCustomHeaderView
            
                header.backgroundColor = color
            
        
    

当我调用此方法时,header.backgroundColor = color 会被调用,但标题的背景颜色不会改变。

所以我的问题是:

tableView:viewForHeaderInSection: 返回的UIView 的实例是否与标题上显示的实际UIView 相同?是副本吗?是别的吗?

如何动态更改此标题视图?我是否必须致电reloadData 才能更改标题的背景颜色?那会浪费资源..

【问题讨论】:

您可以使用tableView.headerViewForSection(x)获取表中的视图 我也试过了,但我得到了同样的结果 【参考方案1】:

我认为您的问题与未重用视图有关,因此您的视图不断在这里创建

let headerView = MyCustomHeaderView()

然后返回,始终使用蓝色背景色

希望对你有帮助

【讨论】:

感谢 Reinier,但遗憾的是,标题视图没有可重用机制 (***.com/a/960157/3844377) 是的,但是你怎么能做到这一点?,如果我找到了一些不错的方法,我会发布我的结果 好的,谢谢,现在我正在使用reloadData,它不会影响我的应用程序的性能,但我真的不喜欢做不必要的事情:)

以上是关于tableView:viewForHeaderInSection: 如何准确工作以及如何动态自定义此视图的主要内容,如果未能解决你的问题,请参考以下文章