将多个原型单元格加载到 UITableView

Load Multiple Prototype Cells into UITableView

我目前有一个包含 2 行自定义单元格的 UITableView。我最近在故事板中添加了第二个原型单元格,并试图将其添加到我的 UITableView 但没有成功。我的cellForRowAtIndexPAth方法如下:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell: FlightsDetailCell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as FlightsDetailCell

    cell.userInteractionEnabled = false

    if indexPath.section == 0 {

        cell.graphView.enableBezierCurve = true
        cell.graphView.enableReferenceYAxisLines = true
        cell.graphView.enableYAxisLabel = true
        cell.graphView.colorYaxisLabel = UIColor.whiteColor()
        cell.graphView.delegate = UIApplication.sharedApplication().delegate as BEMSimpleLineGraphDelegate
        cell.graphView.dataSource = UIApplication.sharedApplication().delegate as BEMSimpleLineGraphDataSource
        return cell
    }

    if indexPath.section == 1 {
        cell.graphView.enableBezierCurve = true
        cell.graphView.enableReferenceYAxisLines = true
        cell.graphView.enableYAxisLabel = true
        cell.graphView.colorYaxisLabel = UIColor.whiteColor()
        cell.graphView.delegate = self
        cell.graphView.dataSource = self
        return cell
    }

    if indexPath.section == 2 {

        let cell2: FlightsInformationCell = tableView.dequeueReusableCellWithIdentifier("Cell2", forIndexPath: indexPath) as FlightsInformationCell
        cell2.userInteractionEnabled = false

        return cell2
    }

    return cell

}

第 0 节和第 1 节正确加载 ID 为 "Cell" 的原型单元格,但是当我去加载第 2 节时,我得到第一个原型单元格的另一个实例,因为它没有分配任何数据委托或数据源。否则,单元格的设置分别与 "Cell" 和 "Cell2" 的 ID 相同,但我似乎无法访问 "Cell2".

补充说明:我的故事板中有 2 个原型单元格,它们的设置相同,因为它们的标识符都标记在相同的框中,继承自它们自己的 类 并已声明在我的 UITableView 中也是如此。至于委托和数据源,我的原始原型单元包含一个图形(使用 BEMSimpleLineGraph),此单元的每个实例都有自己的委托和数据源,并在上面的代码中显示了操作 0 和 1。

下图中的第一个单元格(灰色)是保存图形的原始单元格,单元格 2 位于其正下方,呈白色。

我使用类似于 cellForRowAtIndexPath 中的代码设置了一个测试应用程序,我得到了相同的结果。即使输入了我的 if indexPath.section == 2 子句中的代码,返回的单元格看起来与我的前两个单元格相同(但标签中没有字符串);这是尽管我用不同的子视图设置它,并且日志显示它是我想要的部分的正确 class 2. 为什么会发生这种情况,我不知道,但要修复它,您需要做的是像这样将 if 块中的单元格出队。

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {


cell.userInteractionEnabled = false

if indexPath.section == 0 {
    let cell: FlightsDetailCell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as FlightsDetailCell
    cell.graphView.enableBezierCurve = true
    cell.graphView.enableReferenceYAxisLines = true
    cell.graphView.enableYAxisLabel = true
    cell.graphView.colorYaxisLabel = UIColor.whiteColor()
    cell.graphView.delegate = UIApplication.sharedApplication().delegate as BEMSimpleLineGraphDelegate
    cell.graphView.dataSource = UIApplication.sharedApplication().delegate as BEMSimpleLineGraphDataSource
    return cell
}

else if indexPath.section == 1 {
    let cell: FlightsDetailCell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as FlightsDetailCell
    cell.graphView.enableBezierCurve = true
    cell.graphView.enableReferenceYAxisLines = true
    cell.graphView.enableYAxisLabel = true
    cell.graphView.colorYaxisLabel = UIColor.whiteColor()
    cell.graphView.delegate = self
    cell.graphView.dataSource = self
    return cell
}

else {
    let cell2: FlightsInformationCell = tableView.dequeueReusableCellWithIdentifier("Cell2", forIndexPath: indexPath) as FlightsInformationCell
    cell2.userInteractionEnabled = false
    return cell2
}

}

这可以进一步重构以删除重复的代码,但这应该可行...