我有一个带有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
}
我想念什么?
最佳答案
根据您注册单元的方式,它不会从 Storyboard 或xib文件中加载。只会调用该init方法。您的init方法不会创建标签,因此它将始终为nil
。
您还应该使用dequeueReusableCellWithIdentifier(_:forIndexPath:)
而不是dequeueReusableCellWithIdentifier(_:)
。后者早于 Storyboard ,并且将返回nil
,除非您之前已使用该标识符创建了一个单元格并返回了该单元格。
最后,tableView
调用的init方法不是您已经实现的方法,否则应用程序在尝试解开test.text = ...
可选内容时会在nil
上崩溃。