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

UICollectionView Просмотр заголовка и нижнего колонтитула

Я использую UICollectionView и нуждаюсь в глобальном верхнем и нижнем колонтитулах вместе с заголовками разделов. Оба глобальных заголовка и нижнего колонтитула должны прокручиваться вместе с остальной частью содержимого. В основном они должны работать точно так же, как свойства UITableView tableHeaderView и tableFooterView.

diagram

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

Я действительно вытаскиваю свои волосы, проработав пару часов. Я нашел пару неприятных способов, таких как хакинг с contentInsets и добавление subview в collectionview. То, что я действительно ищу, - это чистый способ сделать это.

Я с нетерпением жду любого совета!

4b9b3361

Ответ 1

Оба глобальных заголовка и нижнего колонтитула являются ячейками (UICollectionViewCell) первого и последнего раздела

Ответ 2

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

ЭТО НЕ ОЧЕНЬ ПРОСТОЕ ПРОЦЕСС.

В WWDC поговорите о расширенных пользовательских интерфейсах с представлениями коллекции, они описывают свой подход с примером кода о том, как они создали глобальный заголовок. Вы можете использовать свой примерный код, а затем добавить к нему глобальный раздел нижнего колонтитула.

От Apple:

Расширенные пользовательские интерфейсы с видами коллекций

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

Ответ 3

Исправить это в методе делегата cellForItemAtIndexPath

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.section == 0)
    {
        // first section
    }
else if (indexPath.section == [dataSourceSectionsArray.count]-1)
    {
        // last section
    }
else
    {
        // normal section
    }
}

И вы должны, конечно, возвратить [dataSourceSectionsArray.count] +2 (один заголовок, один нижний колонтитул) в методе numberOfRowsInSection и иметь в виду всегда ссылаться на [dataSourceSectionsArray objectAtIndex: indexPath.row-1] при доступе к вашим данным в нормальной ячейке, так как нет объекта, соответствующего заголовку в массиве.