Вложенное представление collectionView в TableView - PullRequest
0 голосов
/ 23 октября 2018

Я уже некоторое время успешно вкладываю представления коллекций в табличное представление.

Что я до сих пор не знаю, как это сделать, так это сделать при соблюдении шаблона MVC?

Прямо сейчас я объявляю свое табличное представление и его ячейки и в ячейке (где collectionViewсидит), я присоединяю свой collectionView (я получил 1 на ячейку) и делаю отображение данных.Это работает, но это спагетти-код, в котором мой View действует как контроллер.

Я несколько раз пытался соблюдать шаблоны MVC.Я могу заставить свой контроллер контролировать и мой просмотр таблицы, и мою коллекцию.Мне не терпится сообщить делегату View Collection, какие данные он должен выбрать, поскольку все, что у меня есть в качестве ссылки, это indexPath (из collectionView), но не в каком tableView этот конкретный collectionView находится.

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CollectionViewCell", for: indexPath) as! CollectionViewCell
    return cell
}

Делегат только дает мне indexPath ячейки, а не то, какой это коллекционный вид.Чтобы использовать конкретный пример - давайте предположим, что мои ячейки табличного представления представляют сообщения и что каждое сообщение имеет коллекцию ViewView, которая управляет реакциями (например, Discord).Как мне сообщить делегату collectionView, с каким сообщением он связан?

Большое спасибо за помощь!

1 Ответ

0 голосов
/ 23 октября 2018

Это очень просто.Каждое представление и его подкласс имеют свойство tag.Вы должны иметь IBOutlet или простую ссылку на CollectionView, которая находится в TableViewCell.Когда вы удаляете из очереди TableViewCell, просто установите тег вашего CollectionView равным indexPath.row вашего tableViewCell следующим образом:

tableViewCell.collectionView.tag = indexPath.row

Затем в методах UICollectionViewDataSource или UICollectionViewDelegateдругими словами, вы можете найти, каким коллекционным видом он является, каким tableViewCell выполняет этот коллекционный вид. Вот пример:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CollectionViewCell", for: indexPath) as! CollectionViewCell
    let dataObject = dataSourceArray[indexPath.row] as! YourDataModelObject

    // Here you may set any property of the collectionView cell
    return cell
}

PS: Нет необходимости уважать MVC в такой степени.Вы можете управлять своим CollectionView из TableViewCell.Взгляните на этот пример .

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