简体   繁体   English

委托即使设置为self也返回nil

[英]delegate returns nil even after set to self

I have a ViewController that has a CollectionView of two cells. 我有一个ViewController具有两个单元格的CollectionView。 One of the cells (LoginView) has the login buttons, which I want the ViewController to handle. 其中一个单元格(LoginView)具有登录按钮,我希望ViewController处理该按钮。 The error I'm getting is an unexpected nil even though delegate is set to self in WelcomeViewController. 即使委托在WelcomeViewController中设置为self,我得到的错误也是意外的nil。

ViewController ViewController

    class WelcomeViewController: UIViewController, SomeDelegate ... {

            func createCollectionView(){
                 let loginView = LoginView()
                 loginView.delegate = self

                 //collectionView related stuff here
                 ...
            }
        ...
            override func viewDidLoad() {
                 super.viewDidLoad()
                 createLayer()
                 createCollectionView()
            }
        ...
            func didPressFacebook() {
                print("pressed")
            }
    }

Protocol looks something like this 协议看起来像这样

protocol SomeDelegate {
    func didPressFacebook()
}

and the view is something like this 而视图是这样的

class LoginView: UICollectionViewCell, ConfigurableCell {

    var reuseId: String {
        get {
            return "loginView"
        }
    }

    var delegate : LoginButtonHandlerDelegate!

    //Create other view related stuff here
    ...

    let facebookButton = SocialButton(buttonType: .facebook)
    let googleButton = SocialButton(buttonType: .google)

    override init(frame: CGRect) {
        super.init(frame: frame)
        facebookButton.addTarget(self, action: #selector(didPressLogin), for: .touchUpInside)

       //Add subviews and other relatedstuff here
        ...
    }

    ...

    @objc func didPressLogin(){
        if (facebookButton.buttonIs == "facebook") {
            delegate.didPressFacebook()
        }
    }
}

from the code I see: var delegate : LoginButtonHandlerDelegate! 从代码中我看到: var delegate : LoginButtonHandlerDelegate! should be var delegate : SomeDelegate! 应该是var delegate : SomeDelegate!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM