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

时间:2016-07-07 20:35:43

标签: ios uitableview cocoa-touch

我为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会被调用,但标题的背景颜色不会改变。

所以我的问题是:

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

  • 如何动态更改此标题视图?我是否必须拨打reloadData才能更改标题的背景颜色?这将浪费资源..

1 个答案:

答案 0 :(得分:0)

我认为您的问题与不重复使用视图有关,因此您的视图会不断创建

let headerView = MyCustomHeaderView()

并返回,始终使用蓝色背景颜色

我希望这有助于你