将数据从View Controller传递到Swift中的子控制器

我有三个视图控制器(VC1,父视图控制器和子视图控制器)。 如何在加载ParentVC时将数据从VC1传递到子View控制器? 通常我可以在第一个视图控制器中使用它

var text = "Hello" var sVC = SecondViewController() sVC.string = text 

它会将Hello传递给第二个视图控制器中的variablesstring 。 然后做同样的事情,将数据从第二个视图控制器传递到第三个。 但不幸的是,这个逻辑是行不通的。 我试图将数据从VC1传递给ParentVC,然后传递给ChildVC。 我也试图将VC1的数据直接传递给ChildVC,但是这似乎也不起作用。

这是我的

 import UIKit class ViewController1: UIViewController { var a = "Test" override func viewDidLoad() { var pVC = ParentViewController() pVC.a = a } } 

我能够将数据传递给父视图控制器,它会打印Test但不适用于子视图控制器

 import UIKit class ParentViewController: UIViewController { var pageMenu: CAPSPageMenu? var a = "" func test() { var cvC = ChildViewController(frame: self.view.frame) cvC.a = a } override func viewDidLoad() { println(a) } override func viewWillAppear(animated: Bool) { } override func viewDidAppear(animated: Bool) { super.viewDidAppear(animated) // MARK: - Scroll menu setup // Initialize view controllers to display and place in array var controllerArray : [UIViewController] = [] var controller1 : ChildViewController = ChildViewController(nibName: nil, bundle: nil) controller1.title = "View Controller" controllerArray.append(controller1) // Initialize scroll menu pageMenu = CAPSPageMenu(viewControllers: controllerArray, frame: CGRectMake(0.0, 65, self.view.frame.width, self.view.frame.height), pageMenuOptions: parameters) self.view.addSubview(pageMenu!.view) } } 

在子视图控制器中我有:

 import UIKit class ChildViewController: UIViewController { var a = "" convenience init(frame:CGRect){ self.init(nibName: nil, bundle: nil) self.view.frame = frame } override func viewDidLoad() { var pVC = ParentViewController() pVC.test() println(a) } 

ViewController加载ParentViewController ,没有视图加载到内存中。 这只是您的ParentViewController类的一个实例。

 override func viewDidLoad() { var pVC = ParentViewController() pVC.a = a } 

我想你是加载或提出这个控制器在你的代码中的其他地方。 如果是这样,那么您成功地打印正在设置的variables是有意义的。

println(a) – >“testing”

然而,当你实例化你的ChildViewController ,你提供了一个convenience init框架,你实际上启动了视图层次结构,然后触发viewDidLoad事件。 这是在从ParentViewController -> ViewDidLoad设置variables之前执行的。 而你打印avariables的结果实际上是一个空string。

一种select是把你的逻辑放在你明确调用的函数中。 可以将数据作为参数,或者在调用函数之前设置variables。

你应该检查一下这些,以更好地了解事情的工作方式和path,你可以按照自己的想法完成。

在Swift中实例化和呈现一个viewController

UIViewController类的引用

我怎样才能将数据从父视图控制器传递给子视图控制器?

希望这可以帮助!