【发布时间】:2017-03-27 12:48:41
【问题描述】:
我在界面构建器中可视化我的自定义表格视图单元格时遇到了一些问题。
有人知道如何制作@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)
}
}
谢谢!
【问题讨论】:
-
请添加 tbaleView 数据源方法。
-
添加了数据源方法。我正在尝试在可设计的 UITableViewCell 中设置标签,这意味着我的标签上有一个 IBOutlet?那不应该初始化吗?
-
您能否发布一些代码以进行更多说明?
-
是的,我编辑了我的问题。 xib 文件更新背景颜色,但是当我尝试更新 headerLabel 的文本时,IB builder 崩溃
标签: swift xcode swift3 interface-builder ibdesignable