我为UITableView
创建了自定义标题视图。标题视图的类型为UITableViewCell
。我在故事板中实现了它并将其添加到视图层次结构中,如下面的屏幕截图所示
这是我的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
}
}
当我在模拟器中运行时,它看起来像这样
我的问题是:为什么我的自定义标题视图仅显示在上一部分?
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
方法被调用三次,那么为什么标题只出现在最后一节?
我希望有人可以帮助我。 每个提示都受到高度赞赏。
答案 0 :(得分:2)
我认为它是因为ui元素无法复制,你所做的是将UITableViewCell的实例作为IBOutlet。更好的是,您可以在需要时创建视图。
override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
return tableView.dequeueReusableCell(withIdentifier: "Header") as! UITableViewHeaderFooterView
}
希望它有所帮助。抱歉我的英语不好。