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

10-13 04:25