我有一个表,需要在其中添加标题视图。我在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
}
答案 0 :(得分:4)
因此,您提到您想在Interface Builder中自由设计Header视图,并将其添加到xib文件中。
第一件事,进入Identity Inspector中基于XIB的标题视图(HeaderTableView.xib),并在HeaderTableView
处放置标题视图的类名:
第二件事,打开您的HeaderTableView
swift类(在我的示例中,该类在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)
}
}
结果是我有这个:
不要忘记在ViewController InterfaceBuilder中将tableView用作委托和数据源(例如,我在InterfaceBuilder中的UIViewController在Main.storyboard中):
1)
2)
答案 1 :(得分:1)
因此,根据您的评论,如果要添加Table标头,则不应使用XIB,因为可以使用情节提要实现相同的功能。这是一种简单而更好的方法。只需将UIView拖放到视图控制器的场景底座,然后取出该视图的出口,然后将该视图分配给tableheader就可以了。
table.tableHeaderView = yourview
我将其用作桌面注视视图。
您可以通过大小检查器调整该视图的高度。
答案 2 :(得分: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
}
}