Делегат, возвращающий ноль, не во ViewController, а в классе создания делегата - PullRequest
0 голосов
/ 09 мая 2019

Прежде чем пометить мою проблему как дубликат, пожалуйста, пройдите мой вопрос, Я использовал шаблон делегата в своем приложении, и весь мой код, связанный с делегатами, работает нормально. Но теперь есть один класс, имеющий делегат ноль в точке, которую я описываю ниже.

//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

здесь, когда я отлаживал, я получил, что мой делегат не ноль, но имеет некоторую ссылку на объект, я попытался использовать этот способ также

var campaignVC = CampaignCollectionViewCell()
campaignVC.delegate = self

но это также не сработало для меня, я сделал то же самое со всеми другими моими методами делегатов, и они работают нормально, я понятия не имею, почему это показывает мне такое поведение. Я прошел через каждый вопрос, связанный с делегатами, но ни один из них не помог мне.

1 Ответ

0 голосов
/ 09 мая 2019

Эта ячейка, которую вы создали здесь:

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
...