0

伙计们。我在寻求帮助。这似乎是一个很容易的任务,但我可以解决一整天。我正在尝试使用容器视图创建侧边菜单。当用户按下更多按钮(barButtonItem)时,整个视图向右滑动并出现菜单表。我知道如何使用通知来制作它。但我想通过委托来解决它。这是我的故事板。 在此处输入图像描述

和代码:

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)

    }   

}

谢谢!

4

1 回答 1

0

这个

var sideMenu: MainViewController? // is nil 

override func viewDidLoad() {
    super.viewDidLoad()

    sideMenu?.delegate = self
}

没有对当前显示的 main 的引用,这是nil当您从 Root 呈现 main 时给它参考

于 2018-07-23T14:11:46.473 回答