Подтвердить что ты не робот

Загрузка нескольких прототипных ячеек в UITableView

В настоящее время у меня есть UITableView, содержащий 2 строки пользовательской ячейки. Недавно я добавил вторую прототипную ячейку в свою раскадровку и пытаюсь добавить ее в свой 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 правильно загружают ячейку прототипа с помощью идентификатора "Ячейка", но когда я перехожу к разделу загрузки 2, я получаю еще один экземпляр первой ячейки прототипа за вычетом любых данных, поскольку ему не был назначен делегат или источник данных. В противном случае ячейки устанавливаются одинаково с идентификатором "Cell" и "Cell2" соответственно, но я не могу получить доступ к "Cell2".

Дополнительная разъяснение: у меня есть 2 прототипа в моей раскадровке, они оба настроены одинаково, поскольку оба они имеют свои идентификаторы, помеченные в одних и тех же ячейках, наследуют их собственные классы и объявлены одинаковыми в моем UITableView. Что касается делегатов и dataSources, моя оригинальная ячейка прототипа содержит график (использует BEMSimpleLineGraph), каждый экземпляр этой ячейки имеет свой собственный делегат и источник данных и показан в приведенном выше коде для действий 0 и 1.

Первая ячейка, изображенная ниже (в сером цвете), является исходной ячейкой, которая содержит график, а cell2 находится под ней в белом цвете.

enter image description here

4b9b3361

Ответ 1

Я установил тестовое приложение, используя код, аналогичный тому, что у вас есть в cellForRowAtIndexPath, и я получил те же результаты. Несмотря на то, что код в моем случае if indexPath.section == 2 был введен, возвращаемая ячейка выглядела так же, как мои первые две ячейки (но без строки в ярлыке); это несмотря на то, что я настроил его на разные подзадачи, и журнал показал, что это правильный класс для того, что я хотел для раздела 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
}

}

Это может быть дополнительно реорганизовано, чтобы вынуть повторяющийся код, но это должно сработать...