У меня возникли проблемы с визуализацией моей пользовательской ячейки табличного представления в построителе интерфейса.
Кто-нибудь знает, как сделать ячейку представления таблицы @Designable
?
Когда я импортирую свою пользовательскую ячейку табличного представления в раскадровку с табличным представлением, работает только цвет фона. Когда я пытаюсь установить текст метки внутри ячейки табличного представления, происходит сбой построителя интерфейса.
Моя установка вызывается из следующих методов:
- override public init(style: UITableViewCellStyle, reuseIdentifier: String?)
- required public init?(coder aDecoder: NSCoder)
Я думаю, это потому, что моя метка в данный момент не инициализирована?
Код:
import UIKit
@IBDesignable class ProgressHeaderTableViewCell: UITableViewCell {
@IBOutlet weak var headerLabel: UILabel!
// MARK: - View methods
override public init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
self.setupNib()
}
// MARK: - NSCoding
required public init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.setupNib()
}
func setupNib(){
self.backgroundColor = UIColor.blue
// self.headerLabel.text = "Hello world"
}
}
Обновлен код:
import UIKit
@IBDesignable class CustomTableView: UITableViewCell {
@IBOutlet weak var headerLabel: UILabel!
// MARK: - View methods
override func prepareForInterfaceBuilder() {
self.awakeFromNib()
}
override public init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
//check that there are no current subviews
if self.subviews.count == 0 {
self.setupNib()
}
}
// MARK: - NSCoding
required public init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
//check that there are no current subviews
if self.subviews.count == 0 {
self.setupNib()
}
}
override func awakeFromNib() {
super.awakeFromNib()
self.backgroundColor = UIColor.blue
if headerLabel != nil {
self.headerLabel.text = "Hello world"
}
}
func setupNib(){
let bundle = Bundle(for: CustomTableView.self)
guard let customView = bundle.loadNibNamed("CustomTableView",owner: self, options: nil)?.first as? CustomTableView else {
return
}
customView.frame = self.bounds
self.addSubview(customView)
}
}
Спасибо!