Swift Custom UITableViewCell,以编程方式创建UITableView

时间:2015-02-08 01:03:10

标签: ios uitableview swift

我正在尝试在我以编程方式创建的UITableView中使用自定义TableViewCell类,我无法弄清楚为什么这不起作用。我已经使用了几次自定义TableViewCell类而没有任何问题(在Storyboard中设置Classname)但是在这里我没有设置应该用于生成单元格的类的故事板。

我这样做:

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()输出永远不会出现。无需额外的UILabel(消息)即可呈现TableView。就像一个开箱即用的UITableViewCell。

同样的方法(没有registerClass())我正在运行一个带有Storyboard中自定义单元格的TableView(直接在Storyboard Inspector中定义的Classname),没有任何问题。

您知道为什么自定义类不会被使用吗?

2 个答案:

答案 0 :(得分:30)

除非从xib或故事板加载单元格,否则不会调用

awakeFromNib。将自定义代码从awakeFromNib移至initWithStyle:reuseIdentifier:,因为当您调用dequeueReusableCellWithIdentifier:方法时,这是tableView使用的初始化程序

答案 1 :(得分:1)

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

initWithCoder:因为同样的原因没有被调用 - 尝试重写initWithStyle:reuseIdentifier:。