我正在使用SideMenu来显示我的应用程序菜单。问题是我没有找到将数据从MainViewController
传递到TableViewController
的方法,因为MainViewController
segue.destination
是SideMenu.UISideMenuNavigationController
这是一个包含视图的屏幕,也许您可以更好地理解:
所以我的数据需要从第一个到第三个视图到达。
如果可以提供代表的示例,那将会很棒。
答案 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() {
}
}