在tableview中重用标题部分

时间:2017-10-23 15:07:09

标签: swift uitableview header

我一直在寻找一个体面的解决方案,但大多数似乎已经过时或不足。

我只是在我的UITableViewController中重用自定义的UITableViewHeaderFooterView而苦苦挣扎。

这是我的方法:

  1. 创建一个笔尖。
  2. 创建名为UITableViewHeaderFooterView
  3. 的自定义HeaderView
  4. 添加标签并将其连接到HeaderView
  5. UITableViewController' viewDidLoad()
  6. 中注册笔尖
  7. tableView(_ tableView: UITableView, viewForHeaderInSection section: Int)
  8. 中退出并返回笔尖

    自定义HeaderView类:

    class HeaderView: UITableViewHeaderFooterView {
        @IBOutlet weak var customLabel: UILabel!
    }
    

    UITableViewController课程中:

    override func viewDidLoad() {
        super.viewDidLoad()
    
        tableView.register(UINib(nibName: "HeaderView", bundle: nil), forHeaderFooterViewReuseIdentifier: "Header")
    
    }
    
    override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        let headerView = tableView.dequeueReusableHeaderFooterView(withIdentifier: "Header") as! HeaderView
        headerView.customLabel.text = "This is a header section"
        return headerView
    }
    

    这似乎是许多人建议的方法,但我相信我无法将笔尖的所有者自定义类正确设置为HeaderViewUITableViewHeaderFooterView)。当细胞出列时,我发生了致命的崩溃:

    *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<NSObject 0x60000020ebe0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key customLabel.'

    我绝对确定我已将UILabel正确连接到笔记IB中的文件所有者。

    Assigning class

    我尝试将HeaderView类更改为UIView,但是当强制UITableViewHeaderFooterView为UIView时,dequeueReusableHeaderFooterView(withIdentifier: "Header") as! HeaderView会导致崩溃。

    为什么会这样,目前解决这个问题的方法是什么?

1 个答案:

答案 0 :(得分:1)

我发现问题是我将笔尖 - 文件的所有者设置为HeaderView并将customLabel与之关联。

解决方案是将nib的视图类设置为HeaderView并将标签连接到该视图。将它放入UIView中也是非常必要的。

as such