Класс UICollectionView управляет упорядоченным набором элементов данных и представляет их с помощью настраиваемых макетов. Представления коллекции предоставляют ту же общую функцию, что и представления таблицы, за исключением того, что представление коллекции может поддерживать не только макеты из одного столбца. Представления коллекции поддерживают настраиваемые макеты, которые можно использовать для реализации многостолбцовых сеток, мозаичных макетов, круговых макетов и многого другого. Доступно в iOS 6.0 и более поздних версиях

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

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

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

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

Представления коллекции и объекты макета

Очень важным объектом, связанным с представлением коллекции, является объект макета, который является подклассом класса UICollectionViewLayout . Объект макета отвечает за определение организации и расположения всех ячеек и дополнительных представлений в представлении коллекции. Хотя это определяет их местоположения, объект макета фактически не применяет эту информацию к соответствующим представлениям. Поскольку создание ячеек и дополнительных представлений предполагает координацию между представлением сбора и вашим объектом источника данных, представление сбора фактически применяет информацию представления к представлениям. Таким образом, в некотором смысле объект макета подобен другому источнику данных, предоставляя только визуальную информацию вместо данных элемента.

Обычно вы задаете объект макета при создании представления коллекции, но вы также можете динамически изменять макет представления коллекции. Объект макета хранится в свойстве collectionViewLayout . Установка этого свойства сразу обновляет макет немедленно, без анимации изменений. Если вы хотите анимировать изменения, вы должны вместо этого вызвать метод setCollectionViewLayout: animated: complete: .

Если вы хотите создать интерактивный переход, управляемый распознавателем жестов или сенсорными событиями, используйте метод startInteractiveTransitionToCollectionViewLayout: complete: , чтобы изменить объект макета. Этот метод устанавливает промежуточный объект макета, целью которого является работа с вашим распознавателем жестов или кодом обработки событий для отслеживания хода перехода. Когда ваш код обработки событий определяет, что переход завершен, он вызывает метод finishInteractiveTransition или cancelInteractiveTransition , чтобы удалить промежуточный объект макета и установить целевой целевой объект макета.

Создание ячеек и дополнительных представлений

Объект источника данных представления сбора предоставляет как содержимое для элементов, так и представления, используемые для представления этого содержимого. Когда представление коллекции впервые загружает свое содержимое, оно запрашивает у источника данных представление для каждого видимого элемента. Чтобы упростить процесс создания вашего кода, представление коллекции требует, чтобы вы всегда удаляли представления, а не создавали их явно в своем коде. Есть два метода для отмены просмотров. Тип, который вы используете, зависит от того, какой тип представления был запрошен:

Прежде чем вызывать любой из этих методов, вы должны указать представлению коллекции, как создать соответствующее представление, если оно еще не существует. Для этого вы должны зарегистрировать либо класс, либо nib-файл в представлении коллекции. Например, при регистрации ячеек вы используете метод registerClass:forCellWithReuseIdentifier: или registerNib:forCellWithReuseIdentifier: . В рамках процесса регистрации вы указываете идентификатор повторного использования, который определяет цель представления. Это та же строка, которую вы используете при удалении из представления позже.

После удаления из очереди соответствующего представления в методе делегата настройте его содержимое и верните его в представление сбора для использования. После получения информации о макете из объекта макета представление коллекции применяет ее к представлению и отображает ее.