cellForItemAtIndexPath
функция обрабатывает заполнения каждой секции с ячейками, это не обрабатывать разделы или дополнительные элементы, и, следовательно, это не главное, что вам нужно, когда речь заходит о создании заголовков разделов.
Метод, который необходимо реализовать, - viewForSupplementaryElementOfKind
. Его подпись:
func collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView {}
Предполагая, что ваш CollectionView правильно работает для 1 секции (вы правильно заполнили тело вашего cellForItemAtIndexPath и ваш sectionData массив правильно отражает количество разделов, которые вы хотите отобразить), вы должны иметь возможность создавать заголовки разделов с использованием следующих указателей:
Наряду с ячейками UICollectionView
также поддерживает «дополнительные» объекты вида, обычно используемые для верхних или нижних колонтитулов. Эти дополнительные представления действуют очень точно так же, как и объекты UICollectionViewCell
. Точно так же, как cellForItemAtIndexPath
обрабатывает ячейки, функция viewForSupplementaryElementOfKind
обрабатывает дополнительные виды.
Чтобы реализовать это, вам необходимо сначала подготовить свой ViewController для этого. Сначала измените объект макета, чтобы отразить соответствующий размер заголовка, каждый заголовок будет придерживаться:
let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
layout.headerReferenceSize = CGSize(width: self.view.frame.size.width, height: 30)
ПРИМЕЧАНИЕ: Я использую UICollectionViewFlowLayout
Далее, если вы еще не сделали этого, создать SectionHeader класс, который определяет каждый объект заголовка раздела, так что вы можете зарегистрировать этот класс с объектом CollectionView так:
collectionView!.registerClass(SectionHeaderView.self, forSupplementaryViewOfKind:UICollectionElementKindSectionHeader, withReuseIdentifier: "SectionHeaderView");
Здесь первый и третий аргумент, передаваемый в том же регистрации UICollectionViewCell класса, Первый аргумент в этом методе - это ссылка на класс заголовка раздела, который вы создали. Третий - это идентификатор повторного использования для дополнительного просмотра.
Второй аргумент является специфическим для дополнительных Views, это устанавливает вид из SupplementaryView, который в данном случае представляет собой заголовок, постоянная строка предоставляется классом UICollectionViewFlowLayout UICollectionElementKindSectionHeader
используется для него. Если вы заметили параметры на viewForSupplementaryElementOfKind
, этот вид затем будет передан как параметр kind: String
.
заливки в теле вашего viewForSupplementaryElementOfKind
же, как вы бы для cellForItemAtIndexPath function-- Используя метод dequeueReusableSupplementaryViewOfKind
для создания объекта SectionHeader, а затем установить любые атрибуты, необходимые (этикетки, цвет и т.д.) и, наконец, вернуть заголовок.
Надеюсь, что это поможет!
Ориентир:
https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UICollectionViewDataSource_protocol/index.html#//apple_ref/occ/intfm/UICollectionViewDataSource/
https://developer.apple.com/library/ios/documentation/UIKit/Reference/UICollectionViewFlowLayout_class/index.html#//apple_ref/c/data/UICollectionElementKindSectionHeade
Вот как я это делаю: https://github.com/mattneub/Programming-iOS-Book-Examples/blob/master/bk2ch08p466collectionViewFlowLayout2/ch21p748collectionViewFlowLayout2/ViewController.swift Это является частью загружаемого проект, чтобы вы могли просто загрузить и запустить его. Структура данных модели настроена в 'viewDidLoad'. Извлечение правильных данных из него в методы источника данных очень просто. – matt
Выяснил это на основе вашего учебника! – user3399235
Отлично, спасибо, что позволили мне знать! – matt