2015-07-08 5 views
5

У меня есть три контроллера просмотра (VC1, контроллер родительского контроля и контроллер детского просмотра). Как передать данные из VC1 в контроллер дочернего представления при загрузке ParentVC? Обычно я мог бы использовать это в первый View ControllerПередача данных с контроллера View на дочерний контроллер в Swift

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

я могу передать данные Родитель View Controller и печатает Test, но это не для ребенка View Controller

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

Что такое 'cvC' в вашем коде? – Leo

+0

Предполагается, что это переменная. Я отредактирую его. –

+0

Вы каждый раз создаете новые контроллеры.'ChildViewController' создает новый' ParentViewController', когда загруженное представление и 'ParentViewController' снова создает новый' ChildViewController' в 'test' и' viewDidAppear', но вы передаете свойство 'a' только в методе' test' , что ничего не делает с дочерним контроллером. – redent84

ответ

4

При загрузке ParentViewController из вашего ViewController, в память нет изображений. Это всего лишь экземпляр вашего класса ParentViewController.

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

И я думаю, вы загружаете или представляете этот контроллер где-то еще в своем коде. Если это так, имеет смысл, что вы успешно печатаете заданную переменную.

Println (а) -> «Тест»

Однако, когда вы инстанцировании ваш 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?

Надеется, что это помогает!

+0

Я попытался включить его в функцию, которая явно вызывается из дочернего VC, но это не сработало. Я обновил код. Какие-либо предложения? –

+0

Это не совсем то, что я имел в виду. Пожалуйста, сообщите нам, если вы собираетесь использовать раскадровку при настройке этих представлений или они программно созданы? – Laffen

Смежные вопросы