使用segue从MainViewController发送数据到SideMenu

时间:2017-03-13 07:40:54

标签: swift xcode

我正在使用SideMenu来显示我的应用程序菜单。问题是我没有找到将数据从MainViewController传递到TableViewController的方法,因为MainViewController segue.destinationSideMenu.UISideMenuNavigationController

这是一个包含视图的屏幕,也许您可​​以更好地理解:

enter image description here

所以我的数据需要从第一个到第三个视图到达。

如果可以提供代表的示例,那将会很棒。

2 个答案:

答案 0 :(得分:4)

有很多方法可以做到这一点。例如,您可以使用委托在视图控制器之间传递数据,或使用通知中心。 据我所知,你想用segues。对于该方法,解决方案如下:

在" Satari"视图控制器(我的意思是第三视图控制器,假设SatariViewController)定义了一些变量:

var test : String?

在第一个视图控制器中添加以下代码

 override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
            if segue.identifier == "segueName" {
                let navViewController = segue.destination as! UISideMenuNavigationController
                let satariVC = navViewController.viewControllers.first as! SatariViewController
                satariVC. test = "Data from first view controller"
    }
}

因此,通过此代码,您可以将数据从第一个控制器传递到第三个控制器。但是我认为更有效的解决方案是使用代表。

答案 1 :(得分:2)

您好,我遇到了同样的问题。我设法使用Vah.Sah建议的SideMenu github文档建议的当前函数。

在侧边菜单的ViewController中:

var test: String?

在第一个ViewController中:

@IBAction func menuPressed(_ sender: Any) {

    let menuVC = SideMenuManager.default.menuLeftNavigationController?.viewControllers.first as! YourSideMenuVC

    menuVC.test = "test"
    present(SideMenuManager.default.menuLeftNavigationController!, animated: true, completion: nil)
}

因为使用SideMenu立即调用viewDidLoad函数,您可以通过viewDidAppear访问该变量。

另外,我已经完成了相同的操作,以便从带有代理的firstViewController访问函数。

SideMenu ViewController:

protocol FirstViewControllerProtocol: class {
    func doSomething()
}

class FirstViewController: UIViewController {

    weak var delegate:FirstViewControllerProtocol!

    override func viewDidLoad() {
         super.viewDidLoad()

         // Do any additional setup after loading the view.
    }


    @IBAction func goBack(sender: AnyObject) {
        delegate?.doSomething()
    }
}

在第一个ViewController中:

class MainViewController: UIViewController, FirstViewControllerProtocol {

    override func viewDidLoad() {
        super.viewDidLoad()

    }

    @IBAction func menuPressed(_ sender: Any) {

        let menuVC = SideMenuManager.default.menuLeftNavigationController?.viewControllers.first as! YourSideMenuVC

        menuVC.delegate = self
        present(SideMenuManager.default.menuLeftNavigationController!, animated: true, completion: nil)
    }

    // Define doSomething()
    func doSomething() {

    }
}