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 使用的初始化程序
我正在尝试在我以编程方式创建的 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:
方法