我有两个集合视图。它们都使用相同的单元格布局,但由于其他原因,它们必须是单独的控制器。目前,当我将cellForItemAtIndexPath:
更新为一个时,我必须将更改复制并粘贴到另一个。
我有没有办法将这一方法分开,以便我可以在一个地方进行更改并将它们反映在两个控制器中?其中一个控制器是UIViewController子类。另一个是自定义UIViewController子类的子类。
答案 0 :(得分:2)
您可以创建一个单独的数据源类,然后您可以将collectionview数据源链接到它。
您的数据源将是这样的
class CollectionViewDataSource: NSObject, UICollectionViewDataSource {
var dataArray:[YourObjects]?
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return dataArray!.count ?? 0
}
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("YourCellIdentifier", forIndexPath: indexPath) as! UICollectionViewCell
return cell
}
}
你可以像你一样在你的控制器中移植它
lazy var collectionViewDataSource: CollectionViewDataSource = {
return CollectionViewDataSource()
}()
@IBOutlet weak var collectionView: UICollectionView! {
didSet{
collectionViewDataSource.dataArray = //Your array
collectionView.dataSource = collectionViewDataSource
}
答案 1 :(得分:0)
你可以实现这个目标
假设有2个viewcontroller vc1和vc2以及2个collectionview cv1和cv2
单独上课 CollectionDelegate cD
现在将collectionview的数据源设置为这个新制作的CollectionDelegate
像
cv1.dataSource = cD
cv2.datasource = cD
在CollectionDelegate类中实现cellForItemAtIndexPatha和其他数据源方法