Custom HeaderView仅显示在最后一节中

时间:2017-01-25 16:33:14

标签: ios swift uitableview

我为UITableView创建了自定义标题视图。标题视图的类型为UITableViewCell。我在故事板中实现了它并将其添加到视图层次结构中,如下面的屏幕截图所示

enter image description here

这是我的UITableViewController代码

import UIKit

class SecondCustomTableViewController: UITableViewController {

    @IBOutlet weak var customHeaderView: UITableViewCell!
    let array = ["Row 1", "Row 2", "Row 3"]

    override func viewDidLoad() {
        super.viewDidLoad()

    self.tableView.register(SecondCustomTableViewController.self, forHeaderFooterViewReuseIdentifier: "Header")
    self.tableView.dequeueReusableHeaderFooterView(withIdentifier: "Header")

    }

    // MARK: - Table view data source

    override func numberOfSections(in tableView: UITableView) -> Int {
        return 3
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 3
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)

        cell.textLabel?.text = "\(array[indexPath.row])"

        return cell
    }

    override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        return 44
    }

    override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        print("\(customHeaderView) -> Section: \(section)")
        return customHeaderView
    }
}

当我在模拟器中运行时,它看起来像这样

enter image description here

我的问题是:为什么我的自定义标题视图仅显示在上一部分?

viewForHeaderInSection方法中的print语句如下所示:

Optional(<UITableViewCell: 0x7ff287802200; frame = (0 0; 375 44); clipsToBounds = YES; layer = <CALayer: 0x600000038d00>>) -> Section: 0
Optional(<UITableViewCell: 0x7ff287802200; frame = (0 0; 375 44); clipsToBounds = YES; autoresize = W; layer = <CALayer: 0x600000038d00>>) -> Section: 1
Optional(<UITableViewCell: 0x7ff287802200; frame = (0 176; 375 44); clipsToBounds = YES; autoresize = W; layer = <CALayer: 0x600000038d00>>) -> Section: 2

我还打开了可选项,使其成为非可选项,但其行为相同。由于print语句显示viewForHeaderInSection方法被调用三次,那么为什么标题只出现在最后一节?

我希望有人可以帮助我。 每个提示都受到高度赞赏。

1 个答案:

答案 0 :(得分:2)

我认为它是因为ui元素无法复制,你所做的是将UITableViewCell的实例作为IBOutlet。更好的是,您可以在需要时创建视图。

 override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        return tableView.dequeueReusableCell(withIdentifier: "Header") as! UITableViewHeaderFooterView
    }

希望它有所帮助。抱歉我的英语不好。