Итак, вы упомянули, что добавили представление Header в xib-файл, поскольку вы хотели свободно создавать его из Interface Builder.
Первым делом go для вашего представления заголовка на основе XIB (HeaderTableView.xib) в Identity Inspector и поместите имя класса вашего представления заголовка с HeaderTableView
:
Вторая вещь , откройте свой HeaderTableView
swift класс (в моем примере это в файле ViewController.swift). Чтобы открыть его параллельно с уже открытым файлом на основе XIB (удерживайте нажатой клавишу ALT / OPTION, пока вы нажимаете на файл swift, содержащий этот класс), и свяжите свой IBOutlet из InterfaceBuilder с кодом Swift следующим образом:
В-третьих , ваша реализация (для класса HeaderTableView) выглядит хорошо в файле swift, но для его работы из InterfaceBuilder необходимы небольшие изменения в классе HeaderTableView
, просто чтобы приведу пример того, что я сделал на своем компьютере, чтобы сделать простой пример. У меня есть два класса для 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 как делегат и источник данных (мой UIViewController в InterfaceBuilder находится в Main.storyboard, например):
1)
* 1 036 *
2)