从indexView传递我的indexPath,为indexPath提供两个不同的单元格

时间:2016-06-18 20:51:25

标签: swift

我试图将我的indexPath从collectionView传递到我的单元格,这样我就可以为indexPath创建两个不同的单元格。我试过传递控制器的实例并在单元格中将其设置为self。我也尝试过协议代表,但这似乎也没有用。我经常使用代理,所以我知道我正确地做了,在这种情况下我的委托功能甚至不被调用甚至我在Cell中将委托设置为self。我不确定发生了什么,但似乎没有任何效果。

CollectionView VC

protocol ActivityAboutVCDelegtae: class {

    func passIndexPath(indexPath:Int)
}

class ActivityAboutVC: UICollectionViewController, UICollectionViewDelegateFlowLayout {

    var delegate:ActivityAboutVCDelegtae?

    override func viewDidLoad() {
        super.viewDidLoad()

        self.collectionView!.registerClass(ActivityAboutCell.self, forCellWithReuseIdentifier: CELL_ID)
        self.collectionView?.pagingEnabled = true
        self.collectionView?.alwaysBounceVertical = false
    }

    // MARK: UICollectionViewDataSource
    override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {

        return 2
    }

    override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCellWithReuseIdentifier(CELL_ID, forIndexPath: indexPath) as! ActivityAboutCell

        if delegate != nil {
            delegate?.passIndexPath(indexPath.row)
        }

        return cell
    }

CollectionViewCell

import UIKit

class ActivityAboutCell: BaseCell, UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout, ActivityAboutVCDelegtae {

    lazy var actVc:ActivityAboutVC = {
        let vc = ActivityAboutVC()
            vc.delegate = self
        return vc
    }()


    func passIndexPath(indexPath: Int) {
        print(indexPath)
    }

    override func setupView() {
        super.setupView()

        ActivityAboutSetup()
        backgroundColor = .whiteColor()
    }

1 个答案:

答案 0 :(得分:0)

1)目前尚不清楚您想要实现的目标,但至少以下解决方案将为您提供一种方法来呼叫您passIndexPath方法。 取代

if delegate != nil {
    delegate?.passIndexPath(indexPath.row)
}

cell.passIndexPath(indexPath.row)

2)UICollectionView使用的是项目,而不是行。这就是为什么最终结果应该是

cell.passIndexPath(indexPath.item)

3)actVc属性看起来不必要甚至是错误的。