我有一个带有UILabel的简单IBOutlet设置的自定义UITableViewCell子类。

class SegmentCell: UITableViewCell {

    @IBOutlet weak var test: UILabel!

    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        test.text = "Some Text"
    }

    required init?(coder aDecoder: NSCoder) {
         fatalError("init(coder:) has not been implemented")
    }

}

深信我已经将所有设置正确了,并遵循了其他答案,但是UILabel始终为零。

ViewController:
viewDidLoad:
self.tableView.registerClass(SegmentCell.self, forCellReuseIdentifier: "Cell")

cellForForAtIndexPath
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell") as! SegmentCell
    return cell
}
  • 单元格设置为自定义
  • 重用标识符正确
  • Cells类是SegmentCell
  • Tableview的内容是动态原型(prototype)

  • 我想念什么?

    最佳答案

    根据您注册单元的方式,它不会从 Storyboard 或xib文件中加载。只会调用该init方法。您的init方法不会创建标签,因此它将始终为nil

    您还应该使用dequeueReusableCellWithIdentifier(_:forIndexPath:)而不是dequeueReusableCellWithIdentifier(_:)。后者早于 Storyboard ,并且将返回nil,除非您之前已使用该标识符创建了一个单元格并返回了该单元格。

    最后,tableView调用的init方法不是您已经实现的方法,否则应用程序在尝试解开test.text = ...可选内容时会在nil上崩溃。

    10-08 05:48