在将我的问题标记为重复之前,请仔细阅读我的问题, 我在应用程序中使用了委托模式,所有与委托相关的代码都可以正常工作。但是现在有一个类在我要描述的地方没有其代表为零。
//protocol class,
protocol CampaignCollectionViewCellDelegate: class {
func campaignCollectionViewCell(_ Cell: CampaignCollectionViewCell, didContributePressed: UIButton, at indexPath: IndexPath)
}
// class where delegate is assigning.
class CampaignCollectionViewCell: UICollectionViewCell {
weak var delegate: CampaignCollectionViewCellDelegate? = .none
//here i am getting delegate as nil.
@IBAction func didContributeButtonPressed(_ sender: UIButton) {
if self.delegate != nil {
self.delegate?.campaignCollectionViewCell(self, didContributePressed: sender, at: self.indexPath)
}
}
}
在我的主要课堂上,我正在做这样的事情
@IBOutlet weak var campaignCollectionView: UICollectionView!
和viewDidLoad()
campaignCollectionView.delegate = self
campaignCollectionView.dataSource = self
在调试时,我得到的委托不是nil,但其中有一些对象引用,我也尝试过使用这种方式
var campaignVC = CampaignCollectionViewCell()
campaignVC.delegate = self
但是这对我也没有解决,我对所有其他委托方法都做了同样的事情,而且它们运行良好,我不知道为什么它向我展示了这种行为。我已经解决了与代表有关的每个问题,但没有一个对我有用。
答案 0 :(得分:0)
您在此处创建的该单元格:
var campaignVC = CampaignCollectionViewCell()
与在集合视图中显示的单元格不同。
您需要设置delegate
实际显示在集合视图中的单元格,而不仅仅是任何单元格。
在您的cellForItemAt
方法中,您可能会调用dequeueReusableCell
:
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! CampaignCollectionViewCell
您应该直接在上述行之后设置委托:
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! CampaignCollectionViewCell
cell.delegate = self