Так что мне нужна небольшая помощь, так как я не могу понять это и потратил много времени на это уже без каких-либо результатов. Большинство вещей, которые я нахожу в Интернете, касается того, как преобразовать быстрый проект в фреймворк, но моя проблема не в самом проекте или в Cocoapods, а в о том, как и что я должен сделать доступным для разработчиков,
Итак, я построил фреймворк Swift, который вы можете найти здесь , он построен на UICollectionView
с пользовательской flowlayout
и функцией бокового считывания.
Проблема в том, что я не знаю, как я могу сделать это простым в использовании для разработчиков, я бы хотел, чтобы он вел себя как UICollectionView
, где вам нужно реализовать Пользовательский делегат и источник данных без необходимости использовать значения по умолчанию UICollectionViewDelegate
и UICollectionViewDatasource
, поэтому я могу отфильтровать вещи, которые могут вызвать непредвиденное поведение, или просто упростить задачу.
Так что было бы хорошим подходом здесь? Я подумываю о создании подкласса UICollectionView
, чтобы людям не приходилось использовать UICollectionView
(потому что это может сбить с толку), а вместо этого VerticalCardSwiperView
, который имеет такое же поведение, но немного более ограниченный. Я просто не знаю, правильный ли это подход.
Любые советы, идеи или хорошие примеры будут высоко оценены!
edit 1: Я обновил проект, чтобы он уже имел структуру фреймворка, мне просто нужно выяснить, как я собираюсь предоставить доступ к пользовательским частям разработчикам.
edit 2: Я получил один ответ, но я думаю, что вопрос легко понять неправильно. Цель состоит в том, чтобы заставить его действовать и вести себя как UICollectionView
(с делегатами, источником данных, ...), но более ограниченным, и мне интересно, как мне это сделать, если это вообще возможно.
edit 3: Хорошо, у меня большая часть работает, я оставлю здесь ссылку на Github онлайн, чтобы люди, которым нужно что-то подобное, могли проверить это сами. По сути, я сделал пользовательские настройки VerticalCardSwiperDelegate
и VerticalCardSwiperDatasource
, например:
/// This datasource is used for providing data to the `VerticalCardSwiper`.
public protocol VerticalCardSwiperDatasource: class {
/**
Sets the number of cards for the `UICollectionView` inside the VerticalCardSwiperController.
- parameter verticalCardSwiperView: The `VerticalCardSwiperView` where we set the amount of cards.
- returns: an `Int` with the amount of cards we want to show.
*/
func numberOfCards(verticalCardSwiperView: VerticalCardSwiperView) -> Int
/**
Asks your data source object for the cell that corresponds to the specified item in the `VerticalCardSwiper`.
Your implementation of this method is responsible for creating, configuring, and returning the appropriate `CardCell` for the given item.
- parameter verticalCardSwiperView: The `VerticalCardSwiperView` that will display the `CardCell`.
- parameter index: The that the `CardCell` should be shown at.
- returns: A CardCell object. The default value is an empty CardCell object.
*/
func cardForItemAt(verticalCardSwiperView: VerticalCardSwiperView, cardForItemAt index: Int) -> CardCell
}
и затем я подключил их в классе VerticalCardSwiper
:
public func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return datasource?.numberOfCards(verticalCardSwiperView: verticalCardSwiperView) ?? 0
}
public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
return (datasource?.cardForItemAt(verticalCardSwiperView: verticalCardSwiperView, cardForItemAt: indexPath.row))!
}
И, наконец, я просто подклассифицировал UICollectionView
в VerticalCardSwiperView
и передал его как параметр (так как это в основном подкласс UICollectionView
, он делает то же самое, просто имеет другое имя, которое это легче понять разработчикам) для функций делегата / источника данных. Надеюсь, это поможет кому-то еще. Кроме того, если у вас есть лучший подход, пожалуйста, дайте мне знать.