Почему мой UITableView в UICollectionView в другом UITableView не загружает данные при первой прокрутке к нему? - PullRequest
1 голос
/ 10 апреля 2019

У меня есть UITableView, одна из ячеек содержит UICollectionView. Тогда каждая ячейка UICollectionView также содержит UITableView. Чтобы сделать это более понятным:

Check below Image

При первой прокрутке к этой ячейке ничего не загружается, высота ячейки просто равна 0. Когда я продолжаю прокручивать внешний UITableView, пока эта конкретная ячейка не исчезнет с экрана (уничтожена) и вернусь туда, данные затем загружаются. Вот упрощенный фрагмент кода:

class ViewController: UIViewController {
    @IBOutlet weak var outerTableView: UITableView!

    func tableView(..., cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        if indexPath.row == ... {
            // return regularCells
        }

        let cellThatHasCollectionView: CustomTableViewCell = ...

        cellThatHasCollectionView.sectionData = ... // An array of array

        return cellThatHasCollectionView
    }
}

Специальное UITableViewCell определяется следующим образом:

private class CustomTableViewCell: UITableViewCell {
    private let someCollectionView: UICollectionView = ...

    public var sectionData: [[SomeType]] = []

    init(...) {
        ...
        someCollectionView.delegate = self
        someCollectionView.dataSource = self
    }

    func collectionView(..., numberOfItemsInSection section: Int) -> Int {
        return sectionData.count
    }

    func collectionView(..., cellForItemAt indexPath: IndexPath) -> ... {
        let cell: CustomCollectionViewCell = ...
        cell.items = sectionData[indexPath.row]
        return cell
    }
}

Наконец, у меня есть этот внутренний UITableView, определенный следующим образом:

private class CustomCollectionViewCell: UICollectionViewCell {
    public var items: [SomeType] = []

    private let innerTableView: UITableView = ...

    init(...) {
        ...
        innerTableView.delegate = self
        innerTableView.dataSource = self
    }

    func tableView(..., numberOfItemsInSection section) -> Int {
        return items.count
    }

    ...
}

Как мне решить эту проблему? :)

1 Ответ

0 голосов
/ 10 апреля 2019
public var sectionData: [[SomeType]] = []{
    didSet{
        someCollectionView.reloadData()
    }
}

public var items: [SomeType] = []{
    didSet{
        innerTableView.reloadData()
    }
}

Вы должны создать переменную-флаг для управления someCollectionView и innerTableView, которые загружаются только в первый раз, когда вы устанавливаете sectionData и items

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...