Table header view from .xib

Jio*_*Dev 3 view tableview viewcontroller ios swift

I have a table in which I need to add a title view. I made it in an xib file to configure as I need, but I have problems connecting this view. Tell me what I'm doing wrong!

class HeaderTableView: UITableViewHeaderFooterView {
//I think in this class a mistake

    override init(reuseIdentifier: String?) {
        super.init(reuseIdentifier: reuseIdentifier)
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

}




 override func viewDidLoad() {
        super.viewDidLoad()

         let nib = UINib(nibName: "HeaderTableView", bundle: nil)
        tableView.register(nib, forHeaderFooterViewReuseIdentifier: "HeaderTableView")
    }


    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
            let view = self.tableView.dequeueReusableHeaderFooterView(withIdentifier: "HeaderTableView")  as! HeaderTableView

            returnview
        }
Run Code Online (Sandbox Code Playgroud)

den*_*lor 6

所以你提到你在 xib 文件中添加了你的 Header 视图,因为你想从 Interface Builder 自由地设计它。

首先转到基于 XIB 的标题视图 (HeaderTableView.xib),在 Identity Inspector 中,并将标题视图的类名放在那里HeaderTableView

第二件事,打开你的HeaderTableViewswift 类(在我的例子中,这是在 ViewController.swift 文件中)。要与您已经打开的基于 XIB 的文件并行打开它(在单击包含该类的 swift 文件时按住 ALT/OPTION 键)并将您的 IBOutlet 从 InterfaceBuilder 链接到 Swift 代码,如下所示:

第三,您的实现(对于 HeaderTableView 类)在 swift 文件上看起来不错,但是HeaderTableView需要在类中进行一些小的调整才能使其从 InterfaceBuilder 中工作,只是举个例子,我在我的机器上做了一个简单的示例我有TableView UIViewController 和 HeaderTableView 类的这两个类(都在 ViewController.swift 文件中,但如果需要,您可以将它们分成两个文件):

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource{
    @IBOutlet weak var tableView: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()

        let nib = UINib(nibName: "HeaderTableView", bundle: nil)
        tableView.register(nib, forHeaderFooterViewReuseIdentifier: "HeaderTableView")
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        10
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        return UITableViewCell()
    }

    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        let view = self.tableView.dequeueReusableHeaderFooterView(withIdentifier: "HeaderTableView")  as! HeaderTableView

        return view
    }
}

class HeaderTableView: UITableViewHeaderFooterView {
    @IBOutlet weak var titleLabel: UILabel!

    override func awakeFromNib() {
        super.awakeFromNib()

        titleLabel.text = "Title"
    }

    override init(reuseIdentifier: String?) {
        super.init(reuseIdentifier: reuseIdentifier)
    }

    required init?(coder: NSCoder) {
        super.init(coder: coder)
    }
}
Run Code Online (Sandbox Code Playgroud)

结果我有这个

不要忘记在您的 ViewController InterfaceBuilder 中将 tableView 作为委托和数据源(例如,InterfaceBuilder 中我的 UIViewController 在 Main.storyboard 中):

1)

2)