在TableView之外配置自定义TableViewCell?

时间:2017-08-30 23:26:38

标签: ios swift uitableview

我有一个带有自定义单元格的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类中。这可能吗?

3 个答案:

答案 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
}