我正在尝试加载另一个UIViewController
,以便可以在其中获取IBOutlets
的数据。我用的是斯威夫特和雪碧套装。我所说的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
,然后访问属性/出口。
编辑:添加了示例代码。
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()
关于swift - 实例化View Controller不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38043876/