我正在尝试加载另一个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()
}
}
如果您需要更多信息,请随时问我。提前谢谢!
答案 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()