Swift 带有以编程方式创建的 UITableView 的自定义 UITableViewCell

Swift Custom UITableViewCell with programmatically created UITableView

我正在尝试在我以编程方式创建的 UITableView 中使用自定义 TableViewCell Class,但我不明白为什么这不起作用。我已经使用自定义 TableViewCell Classes 几次没有任何问题(在 Storyboard 中设置 Classname)但是这里我没有 Storyboard 来设置应该用于生成的 Class细胞。

我正在这样做:

override func viewDidLoad() {
    ...
    self.popupTableView.registerClass(CustomTableViewCellPopup.self, forCellReuseIdentifier: "popupTableViewCell")
    ...
}


func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    var cell = tableView.dequeueReusableCellWithIdentifier("popupTableViewCell") as CustomTableViewCellPopup
    ...
    return cell
}

class CustomTableViewCellPopup: UITableViewCell {

    var message: UILabel = UILabel()

    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
    }

    required init(coder decoder: NSCoder) {
        super.init(coder: decoder)
    }

    override func awakeFromNib() {
        super.awakeFromNib()

        println("I'm running!")
        self.message.frame = CGRectMake(0, 0, 10, 10);
        self.message.backgroundColor = UIColor.brownColor()
        self.addSubview(self.message)
    }

}

println() 输出从未出现。 TableView 在没有额外的 UILabel(消息)的情况下呈现。就像开箱即用的 UITableViewCell。

同样的方法(没有注册Class())我是 运行 一个带有故事板自定义单元格的 TableView(Class名称直接在故事板检查器中定义)没有任何问题。

您知道为什么不使用自定义 Class 吗?

您没有看到 println 输出,因为它在 awakeFromNib 中,只有当您的单元格来自故事板或 XIB 时才会调用它。在这里,您只是将 class 注册到 table,因此没有正在进行的 Nib 加载。尝试从 tableView:cellForRowAtIndexPath: 调用配置单元格,而不是在 awakeFromNib 中配置。

initWithCoder: 不会因为同样的原因被调用 - 尝试覆盖 initWithStyle:reuseIdentifier:.

awakeFromNib 不会被调用,除非单元格是从 xib 或故事板加载的。将您的自定义代码从 awakeFromNib 移至 initWithStyle:reuseIdentifier:,因为当您调用其 dequeueReusableCellWithIdentifier: 方法

时,这是 tableView 使用的初始化程序