我想使用自己的UITableViewCell类,所以在相应的UITableViewController中我写
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCellWithIdentifier(cellIdentitfier, forIndexPath: indexPath) as MyTableViewCell //cellIdentifier is initialized
return cell
}
但是,我希望初始化我的Cell,因为我必须在创建时传递参数。 Apple文档说,dequeueReusableCellWithIdentifier调用(如果必须初始化一个单元格)initWithStyle:reuseIdentifier
。
如果有一个要重复使用的单元格,该方法会调用prepareForReuse
。
无论哪种方式,我想在执行其他方法之前将参数传递给我的单元(即分别在初始化和prepareForReuse中)。
有什么方法可以使用UITableViewCell(MyTableViewCell)派生的类中定义的其他初始化器?
答案 0 :(得分:0)
如果你想要一个自定义init
方法,你(a)需要确保你没有定义一个单元格原型(因为如果你这样做,它将调用初始化程序本身); (b)你的cellForRowAtIndexPath
在没有找到重用的单元格时适当处理,因此你必须实例化你自己的(用你想要的任何参数。
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier) as MyTableViewCell?
if cell == nil {
cell = MyTableViewCell(param1: "foo", param2: "bar", reuseIdentifier: cellIdentifier)
// configure new cell here
} else {
// reconfigure reused cell here
}
return cell!
}
但就个人而言,我不会倾向于走那条路。我宁愿利用单元原型和标准初始化例程,但只需根据需要覆盖属性(或调用某些配置函数),例如:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as MyTableViewCell
cell.property1 = "Foo"
cell.property2 = "Bar"
return cell
}
这样我可以享受单元原型,我的单元对象类的自动实例化,IBOutlets和IBActions的映射等,但是在cellForRowAtIndexPath
中做我需要的任何特殊配置。