将调用willDisplayHeaderView,但titleForHeaderInSection中的文本属性保持不变

时间:2017-11-21 02:15:23

标签: ios swift uitableview

我的自定义tableView下面有willDisplayHeaderView

override func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {

    let tableViewHeaderFooterview = UITableViewHeaderFooterView()
    tableViewHeaderFooterview.textLabel?.font = UIFont.hmFont(13)
    tableViewHeaderFooterview.textLabel?.textColor = UIColor.hmDarkGrey()
}

我还有另一个tableViewController来自自定义tableView的子类,下面是titleForHeaderInSection

override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
    if section == 0 {
        return "YOUR SUBSCRIPTION"
    } else if section == 1 {
        return "SIGN OUT"
    }

    return nil
}

我的willDisplayHeaderView被调用,但是当我在模拟器上运行我的应用程序时,我没有看到标题视图标题中的更改。我在这里过去几个小时一直在寻找答案,但到目前为止还没有解决方案。我一开始以为我可能会忘记设置我的delegate/datasource,但这不起作用。

1 个答案:

答案 0 :(得分:2)

让我们来看看你的代码

override func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
  let tableViewHeaderFooterview = UITableViewHeaderFooterView()
  tableViewHeaderFooterview.textLabel?.font = UIFont.hmFont(13)
  tableViewHeaderFooterview.textLabel?.textColor = UIColor.hmDarkGrey()
}

在函数声明中,您有一个名为view的视图,您的函数将被调用。换句话说,iOS正在您的课堂上查找此功能并说,"我即将展示视图,只是让您知道。"但是,在您实施的第一行中,您将创建一个名为tableViewHeaderFooterview的新视图并在其上设置一些属性。这些更改不会反映在iOS告诉您的view中。

此时您有以下几种选择:1)使用view的子视图查找标签(杂乱和不良),2)尝试将其转换为UITableHeaderFooterViewif let header = view as? UITableViewHeaderFooterView { header.textLabel.font = whatever }),或者3)注册你自己的UIView子类并按照你想要的时间配置它:

class MyHeader: UITableViewHeaderFooterView {
  ...
}

override func viewDidLoad() {
  super.viewDidLoad()
  tableView.registerClass(MyHeader.self, forHeaderFooterViewReuseIdentifier: "myHeader")
}

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
  if let header = tableView.dequeueReusableHeaderFooterView(withIdentifier: "myHeader") as? MyHeader {
    myHeader.label.text = "YOUR SUBSCRIPTION";
    return myHeader
  }
  return nil
}