是否可以重用cellForItemAtIndexPath:?

时间:2015-09-03 10:37:38

标签: ios swift

我有两个集合视图。它们都使用相同的单元格布局,但由于其他原因,它们必须是单独的控制器。目前,当我将cellForItemAtIndexPath:更新为一个时,我必须将更改复制并粘贴到另一个。

我有没有办法将这一方法分开,以便我可以在一个地方进行更改并将它们反映在两个控制器中?其中一个控制器是UIViewController子类。另一个是自定义UIViewController子类的子类。

2 个答案:

答案 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和其他数据源方法