通过替换视图委托 nil

delegate nil by replacing view

我有 2 种方式访问​​我的应用程序的其他页面:

当我从菜单或第一页更改页面时,我的代理等于 nil,但是当我第一次 运行 我的应用程序并在我的代理上打印时,代理没问题。

我在控制台上看到 "lol" 消息,但我的菜单打不开,这里我的委托等于 nil,我认为这就是我无法使用 toggleLeftPanel 函数的原因:

@IBAction func menuTapped(sender: AnyObject) {
    print("lol")
    delegate?.toggleLeftPanel?()
}

因此,当我点击图标菜单时无法打开滑出式导航面板:

您可以在这里试用我的应用程序:https://github.com/Vkt0r/SlideOutSideBarTest

我看不出委托和协议之间的问题在哪里,我正在查看教程,但找不到我的错误。

您需要取消注释 NosOffresViewController 中的 menuTapped 方法

并将 nosOffresTapped 替换为

@IBAction func nosOffresTapped(sender: AnyObject) {
    let window  = UIApplication.sharedApplication().keyWindow
    let viewController = window!.rootViewController as! ContainerViewController
    let nosOffresViewController: NosOffresViewController = UIStoryboard.nosOffresViewController()!
    nosOffresViewController.delegate = viewController

    self.delegate?.pushViewControllerInStack!(nosOffresViewController)
    self.navigationController?.pushViewController(nosOffresViewController, animated: false)

}

在 CenterViewContoller 中。还需要声明 ContainerViewContoller 符合 NosOffresViewControllerDelegate 协议。

好的,我明白了为什么它没有设置委托。 UIStoryboard.nosOffresViewController()! returns 每次调用一个新实例。所以你会设置委托,然后推送一个不同的实例。