Swift 4:在尝试向自定义tableview单元格添加标签时,意外地发现了nil

时间:2018-04-01 23:41:38

标签: ios swift uitableview

当我尝试将标签作为子视图添加到我的单元类(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]))  
    }  
}

2 个答案:

答案 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()