2015-02-08 239 views
2

我想在我的程序创建的UITableView中使用自定义的TableViewCell类,我不知道为什么这不起作用。我几次使用自定义的TableViewCell类没有任何问题(在故事板中设置Classname),但在这里我没有Storyboard来设置应该用于生成单元格的类。Swift自定义UITableViewCell以编程方式创建UITableView

我这样做:从不出现

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一样。 (没有registerClass())我正在运行一个TableView与故事板中的自定义单元格(在故事板检查器中直接定义的类名),没有任何问题。

你有没有想过为什么自定义类不被使用?

回答

25

awakeFromNib不会被调用,除非单元格是从xib或storyboard加载的。移动从awakeFromNib您的自定义代码initWithStyle:reuseIdentifier:,因为这是由当你调用它的dequeueReusableCellWithIdentifier:方法

+0

感谢的tableView使用的初始化!有用!不能upvote,对不起;-( – 2015-02-08 11:03:05

+1

@KevinLieser upvoted为你;-( – 2015-04-08 10:37:38

1

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

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

相关问题