实例化View Controller无法正常工作

时间:2016-06-26 22:44:26

标签: swift uiviewcontroller uistoryboard instantiation skscene

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

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

1 个答案:

答案 0 :(得分: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()