Разница между UICollectionViewDelegateFlowLayout UICollectionViewFlowLayout

Я знаю, что UICollectionViewDelegateFlowLayout — это протокол, а UICollectionViewFlowLayout — это класс, и я знаю разницу между протоколом и классом. Насколько я понимаю, у меня может быть класс, который будет следовать протоколу UICollectionViewDelegateFlowLayout, чтобы добиться того же эффекта, что и класс, унаследованный от UICollectionViewFlowLayout. Я прихожу к такому выводу, находя такие отношения между протоколом и классом: - sectionInset – collectionView:layout:referenceSizeForHeaderInSection: -- headerReferenceSize – collectionView:layout:referenceSizeForFooterInSection: -- footerReferenceSize

Я также прочитал следующее в ссылке на протокол: «Все методы в этом протоколе являются необязательными. Если вы не реализуете конкретный метод, делегат компоновки потока использует значения в своих собственных свойствах для соответствующей информации о интервалах». Итак, мой Понимание таково: если у CollectionView есть свойство макета и делегат FlowLayout, делегат FlowLayout потенциально может что-то перезаписать. Другими словами, я могу иметь и то, и другое, и протокол будет иметь более высокий приоритет. Верно?

Итак, в чем логика изобретения протокола и класса, которые делают одно и то же?


person bookmonkie    schedule 04.06.2014    source источник


Ответы (1)


Класс компоновки потока — это своего рода макет потока «по умолчанию», который работает во многих, если не в большинстве случаев. Если вам нужно что-то, с чем не может справиться UICollectionViewFlowLayout, вы можете создать подкласс UICollectionViewLayout, чтобы обеспечить дополнительную функциональность.

Методы делегата просто обеспечивают некоторую ограниченную настройку через вызовы делегата для UICollectionViewFlowLayout по умолчанию.

Из документов: «Протокол UICollectionViewDelegateFlowLayout определяет методы, которые позволяют вам координировать свои действия с объектом UICollectionViewFlowLayout для реализации макета на основе сетки. Методы этого протокола определяют размер элементов и расстояние между элементами в сетке».

Они не делают одни и те же вещи; протокол предоставляется, чтобы позволить вам делать что-то дополнительное, что макет потока без методов делегата не делает по умолчанию. Протокол, по сути, дает вам больше «контроля». Вам не нужно использовать методы делегата, если они вам не нужны.

Нет «приоритета»; протокол является необязательным. Таким образом, вы не используете протокол, если не используете UICollectionViewFlowLayout.

person RegularExpression    schedule 04.06.2014