实例化视图控制器不起作用

Ant*_* O. 2 instantiation uiviewcontroller uistoryboard skscene swift

我正在尝试加载另一个,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()
Run Code Online (Sandbox Code Playgroud)

在我的里面GameViewController

func start() {
     // Constraint
     top.constant = 100
     UIView.animateWithDuration(2){
        self.view.layoutIfNeeded()
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您需要更多信息,请随时问我。提前致谢!

San*_*osh 5

那是因为您的视图控制器尚未加载其视图层次结构。viewController仅当某物向其发送view消息时才加载其视图层次结构。当将view层次结构放在屏幕上时,系统将自行完成此操作。它发生在像prepareForSegue:sender:and 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()
Run Code Online (Sandbox Code Playgroud)