swiftdelegatesprotocolsimessage-extension

Can't access to func() in parent VC via Delegate/Protocol


Can't access to function in parent view controller from a child via delegate/protocol. print() doesn't print.

In Child VC I have this:

protocol MyViewControllerDelegate: class {
    func requestExpandedView()
}
    
class MyViewController: UIViewController {
        
    weak var delegate: MyViewControllerDelegate?
    ...

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

        print("\(indexPath) didSelectItemAt")
        
        delegate?.requestExpandedView()  
    }
}

In Parent VC I have this:

extension MessagesViewController: MyViewControllerDelegate {
    func requestExpandedView() {
        print("Done") // doesn't print anything
        requestPresentationStyle(.expanded)
    }
}

What's wrong?


Solution

  • You need to set the delegate of MyViewController when creating its instance, i.e.

    let vc = self.storyboard?.instantiateViewController(withIdentifier: "MyViewController") as! MyViewController
    vc.delegate = self