当我尝试将标签作为子视图添加到我的单元类(addSubview(nameLabel))时,Mu代码展开nil。我从故事板中拖动了对nameLabel的引用。在故事板中,此单元格链接到myCell类。我已经为不同表中的不同单元格完成了这个精确的过程,它仍然可以正常工作。我能错过什么?
class myCell: UITableViewCell {
var myTableViewController: myViewController?
override init(style: UITableViewCellStyle, reuseIdentifier: String?){
super.init(style: style, reuseIdentifier: reuseIdentifier)
setupViews()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
@IBOutlet var nameLabel: UILabel!
func setupViews() {
addSubview(nameLabel)
addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|[v0]|", options: NSLayoutFormatOptions(), metrics: nil, views: ["v0": nameLabel]))
}
}
答案 0 :(得分:1)
你做错了。将自定义单元格类型设置为表格视图的原型,并在其中添加自定义视图/标签。将它们连接到故事板中的插座。当您这样做时,您不需要自定义代码来创建标签。故事板将为您完成。
如果您坚持在代码中创建标签,则实际上需要创建和配置标签。您当前的代码已将nameLabel
设置为隐式解包的可选项,但您无处创建标签。您的setupLabels代码尝试将nameLabel
添加为子视图,即使它是零,这就是您崩溃的原因:
func setupViews() {
nameLabel = UILabel(frame: CGRectZero) //This is what's missing
addSubview(nameLabel) //This line does not create a label object.
addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|[v0]|",
options: NSLayoutFormatOptions(),
metrics: nil,
views: ["v0": nameLabel]))
}
答案 1 :(得分:0)
像这样从cellForRowAtIndexPath调用setupViews()方法
cell.setupViews()