委托(在创建sideMenu时,委托吗?返回nil)

时间:2018-07-23 14:02:10

标签: swift null delegates delegation side-menu

伙计们。 我正在寻求帮助。这似乎是一项非常简单的任务,但我可以一整天解决。 我正在尝试使用容器视图创建侧面菜单。当用户按下“更多”按钮(barButtonItem)时,整个视图向右滑动,并显示菜单表。我知道如何使用通知。但我想通过代表团解决。这是我的故事板。 enter image description here

和代码:

import UIKit

class RootViewController: UIViewController, SideMenuDelegate {

    @IBOutlet weak var leading: NSLayoutConstraint!

    var sideMenuIsOpen = false
    var sideMenu: MainViewController?

    override func viewDidLoad() {
        super.viewDidLoad()

        sideMenu?.delegate = self
    }

    func openSideMenu() {
        toggleSideMenu()
    }

    func toggleSideMenu() {
        if sideMenuIsOpen {
            leading.constant = 0
        } else {
            leading.constant = 240
        }
    }
}

和:         导入UIKit

protocol SideMenuDelegate {
    func openSideMenu()
}

class MainViewController: UIViewController {

    var delegate: SideMenuDelegate?

    @IBAction func toggleSideMenu(_ sender: UIBarButtonItem) {
        if let delegateUnwrapped = delegate {
            delegateUnwrapped.openSideMenu()
        } else {
            print("nil")
        }
    }
    override func viewDidLoad() {
        super.viewDidLoad()

        BackgroundImageView.createBackground(insideView: self, image: .mainViewBackground)

    }   

}

谢谢!

1 个答案:

答案 0 :(得分:0)

var sideMenu: MainViewController? // is nil 

override func viewDidLoad() {
    super.viewDidLoad()

    sideMenu?.delegate = self
}

没有对当前显示的主文件的引用,当您从根目录中显示主文件时,它是nil