我有一个名为 NormalImageCell 的自定义单元,它继承自 UITableViewCell 并绑定到xib。假设我想创建一个名为 LargeImageCell 的新单元,它继承自 NormalImageCell 而不创建一个全新的xib。我可以在没有界面构建器的情况下以编程方式轻松完成此操作,但由于 NormalImageCell 绑定到xib并且xib中的单元格只能连接到一个自定义类和一个reuseIdentifier,我怎么能够将它重用于LargeImageCell?
没有Interface Builder就可以使用。
class LargeImageCell: NormalImageCell {...}
tableView.registerClass(NormalImageCell.self, forCellWithReuseIdentifier: NormalImageCell.id())
tableView.registerClass(LargeImageCell.self, forCellWithReuseIdentifier: LargeImageCell.id())
这与Interface Builder崩溃了:
tableView.registerNib(NormalImageCell.nib(), forCellWithReuseIdentifier: NormalImageCell.id())
tableView.registerNib(LargeImageCell.nib(), forCellWithReuseIdentifier: LargeImageCell.id())
顺便说一下,我正在声明这样的nib和id方法:
class NormalImageCell: UITableViewCell {
class func id() -> String {
return String(self)
}
class func nib() -> UINib {
return UINib(nibName: String(self), bundle: nil)
}
}
class LargeImageCell: NormalmageCell {
...
}
答案 0 :(得分:0)
你应该从主包中检索nib,如:
class func nib() -> UINib {
return UINib(nibName: String(self), bundle: NSBundle.mainBundle())
}
答案 1 :(得分:0)
所以有一个解决方案,但它确实使您的数据源变得有点复杂。
LargeImageCell
,但不要为其指定任何子类型。NormalImageCell
作为参数以及任何其他信息。NormalImageCell
并将其设置为您的对象的属性。NormalImageCell
出列并用它初始化您的对象 LargeImageCell
。不是最好的选择,但它适用于笔尖单元上的扩展功能。