。xib的表头视图

问题描述 投票:2回答:3

我有一个表,需要在其中添加标题视图。我在xib文件中进行配置,可以根据需要进行配置,但是在连接此视图时遇到问题。告诉我我做错了!

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
        }
ios swift view tableview viewcontroller
3个回答
4
投票

[因此,您提到过要在Header视图中添加Header视图,因为您想从Interface Builder中自由设计它。

第一件事在Identity Inspector中转到基于XIB的标题视图(HeaderTableView.xib),并在HeaderTableView处放置您的标题视图的类名:

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

Third,您的实现(对于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)
    }
}

结果,我有了这个

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9OUzlTNS5wbmcifQ==” width =“ 300”>

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

1)

2)


1
投票

因此,根据您的评论,如果要添加Table标头,则不应使用XIB,因为可以使用情节提要来实现相同的目的。这是一种简单而更好的方法。只需将UIView拖放到视图控制器的场景底座上,然后取出该视图的出口,然后将该视图分配给tableheader就可以了。

table.tableHeaderView = yourview

enter image description here

我用它作为一个tablefooterview。

您可以通过大小检查器调整该视图的高度。


0
投票

早上好,表格视图分为5个部分,第一部分是tableHeaderView,SectionHeader,Cell,SectionFooter和最终tableFooterView。

如果要在表格视图的顶部添加标题,则可以使用此代码。

class HeaderTableView : UIView{

    var title : UILabel = {
        let label = UILabel()
        label.text = "My Title"
        label.translatesAutoresizingMaskIntoConstraints = false
        return label
    }()
    override init(frame: CGRect) {
        super.init(frame: frame)
        setupLabel()
    }

    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    func setupLabel(){
        addSubview(title)
        NSLayoutConstraint.activate([
            title.centerYAnchor.constraint(equalTo: self.centerYAnchor),
            title.centerXAnchor.constraint(equalTo: self.centerXAnchor),
        ])
    }


}

class ViewController: UITableViewController {


    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.

        var tableHeaderView = HeaderTableView(frame: CGRect(x: 0, y: 0, width: self.view.frame.width, height: 200))
        tableHeaderView.backgroundColor = .red
        tableView.tableHeaderView = tableHeaderView
    }



}

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.