将数据从View Controller传递到Swift中的Child Controller

时间:2015-07-08 05:31:14

标签: ios swift parent-child

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

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

它会将Hello传递给第二个视图控制器中的变量string。然后做同样的事情将数据从第二视图控制器传递到第三视图控制器。但不幸的是,这种逻辑不起作用。我试图将数据从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)

    }
}

在Child View Controller我有:

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)
}  

1 个答案:

答案 0 :(得分:4)

ParentViewController加载ViewController时,没有视图加载到内存中。它只是您ParentViewController课程的一个实例。

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

我猜你在代码中的其他地方加载或显示这个控制器。如果是这样,那么您成功打印正在设置的变量是有道理的。

  

println(a) - > “测试”

但是,当您实例化ChildViewController时,您正在为其convenience init提供一个框架,而您实际上是在启动视图层次结构,而后者又会触发viewDidLoad事件。这是在a设置ParentViewController -> ViewDidLoad变量之前执行的。打印a变量的结果实际上是一个空字符串。

一种选择是将您的逻辑放在您明确调用的函数中。 (可选)将数据作为参数,或者在调用函数之前设置变量。

您应该查看其中的一些内容,以便更好地了解工作方式和您可以遵循的路径,以实现您的目标。

Instantiate and Present a viewController in Swift

UIViewController class reference

How can I passing data from parent view controller to child view controller?

希望这有帮助!