Установить UICollectionView, встроенный в UITableViewCell - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть UITableView, который содержит список категорий (в данном примере, список видов спорта, например, на основе воды и суши)

В каждой ячейке этой таблицы есть список видов спорта, связанных с типомСпорт отображается во вложенном UICollectionView.Например, на водной основе будут использоваться серфинг и плавание.

Think Netflix - с вертикальными категориями прокрутки с горизонтально прокручиваемыми подкатегориями.

Вот пример JSON (обратите внимание, что показанный JSON предназначен только для описанияЯ сохранил это в RealmDb)

{
"category": [
    {
        "title": "Sport Listings",
        "category_content": [
            {
                "title": "Water Based",
                "category_content": [
                    {
                        "title": "Surfing"
                    }, {
                        "title": "Swimming"
                    }, {
                        "title": "Snorkelling"
                    }, {
                        "title": "Tombstoning"
                    }
                ]
            },
            {
                "title": "Land Based",
                "category_content": [
                    {
                        "title": "Football"
                    }, {
                        "title": "Rugby"
                    }
                ]
            }
        ]
    }
]
}

У меня есть таблица, правильно заполненная двумя ячейками ("На основе воды" и "На основе земли"), но теперь у меня возникают проблемы с пониманием, как анализироватьколичество и данные для каждого представления коллекции строк таблицы, чтобы я мог установить текст для каждого делегата представления коллекции.

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

У кого-нибудь есть указатели?Из примеров, которые я уже видел, вложенный счетчик UICollectionView кодируется жестко, а не динамически, как и с содержимым делегата (то же изображение / текст)

Я не разместил ни одного кода, поскольку он стал полным беспорядкомпока я пытался это выяснить.При необходимости я могу снять его и поставить здесь.

1 Ответ

0 голосов
/ 20 февраля 2019

По моему мнению, табличное представление следует использовать только тогда, когда вы хотите воспользоваться его основными функциями: переработка для поддержки большого количества ячеек, а также другими функциями, такими как поиск, алфавитизация и т. Д. Я бы предпочел использовать вертикальныйстековый просмотр и управление вашими коллекциями, а не хранение их в ячейках.Я представляю, что повторное использование представлений вашей коллекции при прокрутке было бы кошмаром - потому что один и тот же экземпляр ячейки будет использоваться повторно - но теперь при прокрутке вниз он будет иметь неправильный вид коллекции.

Если в этом табличном виде будет только 10 строк, я бы использовал Stackview с вертикальной ориентацией.Вам не нужны клетки или переработка.Когда я ранее использовал представления таблиц для вертикальных макетов, у меня возникали проблемы с очисткой состояния и прокачкой элементов по переработанным ячейкам.

Я бы, вероятно, разбил делегат каждого представления коллекции на отдельный класс.

Чтобы ответить на ваш главный вопрос: если вы все еще хотите использовать табличное представление, установите для reuseIdentifier уникальное значение для каждой строки, чтобы не происходило повторное использование.И управляйте массивом объектов источника данных, чтобы назначить каждому из ваших представлений коллекции в cellForRow вашего метода tableView.

Другой вариант заключается в том, чтобы каждая ячейка была источником данных для каждого представления коллекции - поэтому она полностью автономна, создав собственный подкласс UITableViewCell, который служит и источником данных, и контейнером пользовательского интерфейса для представления коллекции.Затем внедрите универсальную модель данных в эту ячейку в методе cellForRow (который будет работать для всех типов представлений коллекции - независимо от типа данных).

Я бы сохранил источники данных как отдельные объекты и вставил бы их в ячейки, потому что для меня ячейка должна быть просто "оболочкой" - элементом макета пользовательского интерфейса и не должна содержать деталиисточник данных (таким образом, источник данных может быть повторно использован и в других местах, а не только в этой ячейке)

...