Индексирование нескольких пользовательских таблиц TableViewCell в TableView - PullRequest
0 голосов
/ 07 ноября 2019

Я создаю TableView, который начинается с изображения сверху, приблизительно 5 ячеек проанализированного json, другого изображения, приблизительно еще 3 ячеек проанализированного json и другого изображения.

У меня есть 3 пользовательских перьячто я использую. Каждый из них уникален.

Я получаю ошибку «Индекс вне диапазона» в строке «let item = page? .Collapsibles [indexForSecondSetTableViewCells]» *

Вот мой код:

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

    let currentIndex = indexPath.row - 1
    let numberofCarousels = self.page?.carousels.count
    let indexAfterCarousels = numberofCarousels ?? 00 + 1
    let indexForSecondSetTableViewCells = indexAfterCarousels + 1

    if indexPath.row == 0 {

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

        cell.pipesOne.image = UIImage(named: "WhatsNew1")

        return cell
    }

    if indexPath.row == indexAfterCarousels {

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

        cell.pipesOne.image = UIImage(named: "WhatsNew2")

        return cell
    }

    if indexPath.row == indexForSecondSetTableViewCells {

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

        let item = page?.collabsible[indexForSecondSetTableViewCells]

        cell.collabsibleTitle.text = item?.title
        cell.collabsibleDescription.text = item?.content

        return cell
    }

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


    let item = page?.carousels[currentIndex]

    cell.newsTitle.text = item?.title
    cell.newsText.text = item?.caption
    cell.newsImage.kf.setImage(with: page?.carousels[currentIndex].imageURL)

    return cell

}

        func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return (page?.carousels.count ?? 0) + 1 + (page?.collapsibles.count ?? 0)
}

Обновление: я упростил код, чтобы дважды использовать один и тот же объект json, чтобы каждый элемент отображался точно в ту ячейку, в которую он должен перейти, и я все еще получаю ошибку «Неустранимая ошибка: индекс вне диапазона» в строке 7 с let item = page?.collapsible[indexPath.row]

Новый код:

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

    if indexPath.row == 0 {

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

        cell.pipesOne.image = UIImage(named: "WhatsNew1")

        return cell
    }

    if indexPath.row == 1 {

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

        let item = page?.carousels[indexPath.row]

        cell.newsTitle.text = item?.title
        cell.newsText.text = item?.caption
        cell.newsImage.kf.setImage(with: page?.carousels[indexPath.row].imageURL)

        return cell
    }

    if indexPath.row == 6 {

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

        cell.pipesOne.image = UIImage(named: "WhatsNew2")

        return cell
    }

    if indexPath.row == 7 {

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

        let item = page?.collapsibles[indexPath.row]

        cell.collabsibleTitle.text = item?.title
        cell.collabsibleDescription.text = item?.content


        return cell
    }
    return UITableViewCell()
}


func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 11
}

1 Ответ

0 голосов
/ 07 ноября 2019

Попробуйте print("\(indexPath)") в

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    print("\(indexPath)")
}

Тогда вы будете знать, сколько строк он успешно показывает перед сбоем. Затем в cellForRowAt укажите условную точку останова, такую, что она останавливается, когда indexPath является той, в которой произошел сбой. Теперь выполните po (page?.carousels.count ?? 0) + 1 + (page?.collapsibles.count ?? 0), чтобы увидеть, сколько строк имеет ваш просмотр таблицы. Определенно indexForSecondSetTableViewCells больше, чем количество строк

...