在tableView中使用多个自定义UITableViewCell(_cellForRowAt :)

时间:2017-03-17 08:41:31

标签: ios swift uitableview

我有一些自定义UITableViewCell,并会随机使用其中一些。但是在我注册之后,它会在tableView(_cellForRowAt:)中崩溃。 这是我的代码:   在viewDidLoad方法

    tableView.register(CustomACell.self, forCellReuseIdentifier: "Identifier")
    tableView.register(CustomACell.self, forCellReuseIdentifier: "Identifier")

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let model = dataSource[indexPath.row]
    if let type = model.type {
        switch type {
        case .A:
            let cell = tableView.dequeueReusableCell(withIdentifier: MyIdentifier) as! CustomACell
            cell.assgin(message: model)
            return cell

        case .B:
            let cell = tableView.dequeueReusableCell(withIdentifier: MyIdentifier) as! CustomBCell
            cell.assgin(message: model)
            return cell
        }
    }
    let cell = tableView.dequeueReusableCell(withIdentifier: MyIdentifier) as! CustomACell
    cell.assgin(message: model)
    return cell
}

如果我同时注册,它会在案件中崩溃.A。如果我不胜,其中一些会在tableView.dequeueReusableCell崩溃。 这是控制台错误信息之一:

无法转换类型' TM.CustomACell' (0x10bb40940)到' TM.CustomBCell' (0x10bb40578)。

2 个答案:

答案 0 :(得分:3)

更改CellReuseIdentifiers。您对两个自定义单元格使用相同。对不同的细胞使用不同的识别。

http://192.168.5.53:8080

var nibName = UINib(nibName: "Identifier1", bundle: nil)
        self.tableView.register(nibName, forCellReuseIdentifier: "Identifier")

nibName = UINib(nibName: "Identifier2", bundle: nil)
        self.tableView.register(nibName, forCellReuseIdentifier: "Identifier2")

然后更改cellForRowAt,尝试以下代码

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let model = dataSource[indexPath.row]
    if let type = model.type {
        switch type {
        case .A:
            let cell = tableView.dequeueReusableCell(withIdentifier: "Identifier1") as! CustomACell
            cell.assgin(message: model)
            return cell

        case .B:
            let cell = tableView.dequeueReusableCell(withIdentifier: "Identifier2") as! CustomBCell
            cell.assgin(message: model)
            return cell
       default : 
            let cell = tableView.dequeueReusableCell(withIdentifier: "Identifier1") as! CustomACell
            cell.assgin(message: model)
            return cell
        }
    }

}

答案 1 :(得分:1)

如果您创建了单独的Nib,那么您可以注册,否则无需注册

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) ->UITableViewCell{

     var cell = UITableViewCell(style: .default, reuseIdentifier: "pgIdentifier")

     if (XXX == true) {

           let pgtcell = tableView.dequeueReusableCell(withIdentifier: "indetifier", for: indexPath) as! CustomCell1
     } else {

          let pgtcell = tableView.dequeueReusableCell(withIdentifier: "indetifier", for: indexPath) as! MyCustomCell1

     }
}