【问题标题】:delegation (while creating sideMenu, delegate? returns nil)委托(在创建 sideMenu 时,委托?返回 nil)
【发布时间】:2018-12-31 00:24:26
【问题描述】:

伙计们。 我在寻求帮助。这似乎是一个很容易的任务,但我可以解决一整天。 我正在尝试使用容器视图创建侧边菜单。当用户按下更多按钮(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)

    }   

}

谢谢!

【问题讨论】:

  • sideMenu 似乎一直是nil - 你忘记初始化侧边菜单了吗?可能,是的。
  • 是的,我已经明白了。但我不知道如何解决它。当我尝试“var sideMenu = MainViewController()”时它不起作用。

标签: swift null delegates delegation side-menu


【解决方案1】:

这个

var sideMenu: MainViewController? // is nil 

override func viewDidLoad() {
    super.viewDidLoad()

    sideMenu?.delegate = self
}

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

【讨论】:

  • 我不确定我是否理解。我是编程新手。并让一切都像谷歌说的那样=)我怎样才能提供参考?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-10
  • 1970-01-01
  • 2015-06-07
相关资源
最近更新 更多