0

Я пытаюсь загрузить еще один UIViewController, чтобы я мог получить данные IBOutlets внутри него. Я использую Swift и Sprite-Kit. UIViewController Я говорю о называется GameViewController. Это первое, что загружается в моей игре. Затем он переходит к моему GameScene. Здесь я пытаюсь создать экземпляр моего GameViewController. Я хочу сделать это, потому что я использую библиотеку под названием iCarousel, и я хочу оживить ее, перемещаясь с моего GameScene. Однако iCarousel можно использовать только на UIViewController. Поэтому я хочу вызвать функцию в GameViewController, которая будет вызываться в GameScene. В этой функции есть NSLayoutConstraint, который используется для перемещения карусели. Всякий раз, когда я называю эту функцию, она говорит, что ее ноль. Вот некоторые из моего кода:Мгновенный просмотр контроллера не работает

Внутри мой GameScene:

let storyboard: UIStoryboard = UIStoryboard.init(name: "Main", bundle: nil) 
let firstViewController: GameViewController = storyboard.instantiateViewControllerWithIdentifier("Load-up") as! GameViewController 
firstViewController.start() 

Внутри мой GameViewController:

func start() { 
    // Constraint 
    top.constant = 100 
    UIView.animateWithDuration(2){ 
     self.view.layoutIfNeeded() 
    } 
} 

Если вам нужна дополнительная информация, не стесняйтесь спрашивать меня. Заранее спасибо!

ответ

3

Это потому, что ваш контроллер представления еще не загрузил свою иерархию представлений. viewController загружает свою иерархию представлений только тогда, когда что-то отправляет сообщение view. Система будет делать это сама по себе, когда поставить на экран иерархию view. И это происходит после звонков, таких как prepareForSegue:sender: и viewWillAppear:, loadView(), self.view.

Знаете, здесь outlets еще nil т.к. пока не загружен.

Просто попробуйте заставить ваш VC позвонить self.view, а затем получить доступ к свойствам/выходам.

Редактировать: Добавлен образец кода.

let storyboard = UIStoryboard.init(name: "Main", bundle: nil) 
let firstViewController = storyboard.instantiateViewControllerWithIdentifier("Load-up") as! GameViewController 
debugPrint("Printing for the sake of initializing view of VC: \(firstViewController.view)") 
firstViewController.start() 
+0

Спасибо за ответ ... Я не совсем понимаю, что вы имеете в виду. Не могли бы вы дать мне простой пример в коде того, что вы имеете в виду, используя код, который я поставил? Спасибо –

+0

Отредактировано в моем ответе, пожалуйста, попробуйте сейчас. – Santosh