我试图将我的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()
}
答案 0 :(得分:0)
1)目前尚不清楚您想要实现的目标,但至少以下解决方案将为您提供一种方法来呼叫您passIndexPath
方法。
取代
if delegate != nil {
delegate?.passIndexPath(indexPath.row)
}
与
cell.passIndexPath(indexPath.row)
2)UICollectionView
使用的是项目,而不是行。这就是为什么最终结果应该是
cell.passIndexPath(indexPath.item)
3)actVc
属性看起来不必要甚至是错误的。