自定义表格单元格类在cellForRowAt

时间:2017-10-05 13:53:36

标签: ios swift identifier tablecell

这个问题让我疯狂了3天。我创建了一个自定义单元类:

class TransitoPalinaTableViewCell: UITableViewCell {

@IBOutlet weak var lblOrario: UILabel!
@IBOutlet weak var lblDestinazione: UILabel!
@IBOutlet weak var lblNote: UILabel!
@IBOutlet weak var lblBus: UILabel!

override func awakeFromNib() {
    super.awakeFromNib()
    // Initialization code
}

override func setSelected(_ selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    // Configure the view for the selected state
}

}

在我的视图控制器中我有这个:

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

    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! TransitoPalinaTableViewCell

    // Configure the cell...
    let hour = Int(self.transito.listaCorse[indexPath.row].tempoTransito) / 3600
    let mins = Int(self.transito.listaCorse[indexPath.row].tempoTransito % 3600) / 60

    cell.lblOrario?.text = String(format: "%02d:%02d", hour, mins)
    cell.lblDestinazione?.text = self.transito.listaCorse[indexPath.row].arrivoCorsa
    cell.lblNote?.text = ""
    cell.lblBus?.text = self.transito.listaCorse[indexPath.row].automezzo


    cell.backgroundColor = UIColor.init(red: 0, green: 60/255, blue: 113/255, alpha: 1)

    return cell
}

在故事板中,我设置了表格视图单元格标识符:" Cell"和自定义类" TransitoPalinaTableViewCell"。

问题是当调用cellForRowAt时我得到了错误

  

由于未捕获的异常而终止应用   ' NSInternalInconsistencyException',原因:'无法将单元格出列   带标识符Cell - 必须注册一个nib或类   标识符或连接故事板中的原型单元'

在dequeueReusableCell命令行。

正如我在其他帖子中读到的那样,我没有说明这句话 viewdidLoad()中的self.tableView.register(TransitoPalinaTableViewCell.self, forCellReuseIdentifier: "Cell") - 它创建了一个全新的单元格模型,与故事板中的出口没有关联。 我试图再次创建TransitoPalinaTableViewCell类及其出口,但没有任何改变。

任何帮助表示感谢。

2 个答案:

答案 0 :(得分:1)

您可以使用单元格类或单元格笔记注册单元格。

tableView.register(UINib(name: "YourNibName", bundle: nil), forCellReuseIdentifier: "Cell")

但只有在Xib文件中创建了一个单元格时才有效。如果它是在Storyboard中创建的,那么我担心除了你创建它的ViewController之外,其他任何地方都无法使用该单元格。

答案 1 :(得分:0)

我使用.xib文件创建了一个新的CustomTableViewCell类,并使用此文件将类连接到出口。我将 customCell 设置为xib文件的Attributes Inspector中的标识符,并从表视图控制器中的storyboard中删除了任何其他标识符。

在viewDidLoad中,我按照以下方式注册了Cell:

let cellNib = UINib.init(nibName: "CustomTableViewCell", bundle: nil)
self.tableView.register(cellNib, forCellReuseIdentifier: "customCell")

并且在cellForRowAt中我使用了

let cell = tableView.dequeueReusableCell(withIdentifier: "customCell", for: indexPath) as! CustomTableViewCell