将数据从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之前执行的。 而你打印a
variables的结果实际上是一个空string。
一种select是把你的逻辑放在你明确调用的函数中。 可以将数据作为参数,或者在调用函数之前设置variables。
你应该检查一下这些,以更好地了解事情的工作方式和path,你可以按照自己的想法完成。
在Swift中实例化和呈现一个viewController
UIViewController类的引用
我怎样才能将数据从父视图控制器传递给子视图控制器?
希望这可以帮助!