ItemsDataSource
ItemsDataSource 是 UICollectionView 的通用数据源。
功能
- 能够创建任何数据类型的集合
- 可重用的 UICollectionViewCell 和 UICollectionReusableView
- 核心是 UICollectionView
- 易于扩展
要求
- iOS 10.0+
- Xcode 9.0+
- Swift 5.0+
安装
CocoaPods
CocoaPods 是 Cocoa 项目的依赖管理器。您可以使用以下命令安装:
$ gem install cocoapods
CocoaPods 1.1+ 是构建 ItemsDataSource 所必需的。
要使用 CocoaPods 将 ItemsDataSource 整合到您的 Xcode 项目中,请在您的 Podfile
中指定它
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '10.0'
use_frameworks!
target '<Your Target Name>' do
pod 'ItemsDataSource'
end
如果您使用的是 CocoaPods 1.5.0+
,则可以将 ItemsDataSource
作为静态库包括进来
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '10.0'
target '<Your Target Name>' do
pod 'ItemsDataSource'
end
然后,执行以下命令
$ pod install
Carthage
Carthage 是一个去中心化的依赖项管理器,它会构建您的依赖项,并提供二进制框架。
您可以使用以下命令使用 Homebrew 来安装 Carthage
$ brew update
$ brew install carthage
要用 Carthage 将 ItemsDataSource 整合到您的 Xcode 项目中,请在您的 Cartfile
中指定它
github "ItemsDataSource"
执行 carthage update
命令来构建框架,并将生成的 ItemsDataSource.framework
拖拽到您的 Xcode 项目中。
Swift Package Manager
Swift Package Manager 是一个用于自动化 Swift 代码发布的工具,并集成到 swift
编译器中。它仍在早期开发阶段,但 ItemsDataSource 支持在支持平台上使用它。
一旦您设置了 Swift 包,只需将其添加到 Package.swift
中的 dependencies
值即可轻松将 ItemsDataSource 作为依赖项添加。
Swift 4
dependencies: [
.package(url: "https://github.com/minikin/ItemsDataSource.git")
]
手动操作
如果您不希望使用上述任何依赖项管理器,您可以将 ItemsDataSource 手动集成到项目中。只需将 Sources
文件夹中的文件复制到您的项目中即可。
CellDescriptor.swift
Groupable.swift
Itemable.swift
ItemsDataSource.swift
SupplementaryDescriptor.swift
使用方法
按照常规方式定义您的模型
import UIKit
import ItemsDataSource
struct Vitamin {
// MARK: - Instance Properties
let name: String
let amount: Double
}
让您的模型符合 Itemable
extension Vitamin: Itemable {
var itemCellDescriptor: CellDescriptor {
return CellDescriptor(reuseIdentifier: ReuseIdentifier.vitaminCell, configure: configureIngredientCell)
}
}
在扩展中添加模型的 configure
方法
extension Vitamin {
func configureIngredientCell(_ cell: ViataminCell) {
cell.vitaminNameLabel.text = name
cell.backgroundColor = UIColor.randomColor()
}
}
在观音控制台中注入数据源
import ItemsDataSource
import UIKit
final class ExampleViewController: UIViewController {
// MARK: - Injections
public var vitaminsDataSourse = ItemsDataSource(items: [Vitamin](),
cellDescriptor: { $0.itemCellDescriptor })
// MARK: - IBOutlets
@IBOutlet var exampleCollectionView: UICollectionView! {
didSet {
setExampleCollectionViewDataSource()
exampleCollectionView.delegate = self
setExampleCollectionViewLayout()
exampleCollectionView.reloadData()
}
}
// MARK: - Instance Properties
var vitamins = [Vitamin]()
// MARK: - ViewController LifeCycle
override func viewDidLoad() {
super.viewDidLoad()
print("vitamins", vitamins)
}
// MARK: - Helpers
private func setExampleCollectionViewDataSource() {
vitaminsDataSourse.items = vitamins
exampleCollectionView.dataSource = vitaminsDataSourse
}
private func setExampleCollectionViewLayout() {
let layout = CommonFlowLayout(columns: 2,
itemHeight: 200,
inset: 5,
spacing: 0,
lineSpacing: 5)
exampleCollectionView.collectionViewLayout = layout
}
}
// MARK: - UICollectionViewDelegate
extension ExampleViewController: UICollectionViewDelegate {}
有关更多详情,请查看iOS示例或在我的Twitter上向我提问:@minikin
许可证
ItemsDataSource遵循MIT许可证。有关详情,请参阅LICENSE。