我有三个视图控制器(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)
}
答案 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?
希望这有帮助!