实例化视图控制器不工作

Instantiate View Controller not working

我正在尝试加载另一个 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()
    }
}

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

那是因为您的视图控制器尚未加载其视图层次结构。 viewController 仅当某些东西向它发送 view 消息时才加载其视图层次结构。系统将在将 view 层次结构显示在屏幕上时自行执行此操作。它发生在像 prepareForSegue:sender:viewWillAppear: , loadView(), self.view.

这样的调用之后

所以这里你的 outlets 仍然是 nil 因为它还没有加载。

只需尝试强制您的 VC 调用 self.view,然后访问 properties/outlets。

编辑: 添加了示例代码。

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