我的自定义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
,但这不起作用。
答案 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)尝试将其转换为UITableHeaderFooterView
( if 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
}