我有一个带有自定义单元格的TableView,需要相当冗长的配置,并且在我的应用程序中多次使用。我想避免重复的代码,只需在一个地方配置单元格。我可以创建这样的函数吗?
_git-checkout
理想情况下,我可以将func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "betterPostCell", for: indexPath) as! BetterPostCell
return configureCell(cell)
}
放入BetterPostCell类中。这可能吗?
答案 0 :(得分:1)
是的,你可以做到这一点,这是让你的表视图代码不会爆炸的好方法,特别是如果你在一个表视图中有许多不同类型的单元格。
在BetterPostCell类中,创建一个名为configure的方法,如下所示:
func configure() {
//configure your cell
}
然后在你的cellForRowAt方法中,只需从你的单元格中调用该方法:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "betterPostCell", for: indexPath) as! BetterPostCell
cell.configure()
return cell
}
答案 1 :(得分:0)
您可以使用configure
函数和关联类型Cell
创建协议。使用协议扩展,您可以为不同的单元格类型和其他方法添加默认实现。
protocol CellConfigurable {
associatedType Cell
func configure(_ cell: Cell)
}
extension CellConfigurable where Cell == SomeTableViewCell {
func configure(_ cell: SomeTableViewCell) {
...
}
}
答案 2 :(得分:0)
try this code to create CustomCell:-
class CustomCell: UITableViewCell {
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
self.initViews()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.perform(#selector(self.initViews), with: self, afterDelay: 0)
}
//MARK: Init views
func initViews() {
//Add your code
}
//MARK: Layout subviews
override func layoutSubviews() {
super.layoutSubviews()
// Here you can code for layout subviews
}
//MARK: Update all valuesw model
func updateWithModel(_ model: AnyObject) {
//here you can update values for cell
}
}
//Call CustomCell in Tableview class
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "customCell", for: indexPath) as! CustomCell
cell.updateWithModel(items[indexPath.row])
return cell
}