2017-09-14 116 views
0

我正在努力实现将在2视图控制器,vc1和vc2之间移动的代码。Swift之间的视图控制器之间的基本转换

vc1在2个SKView之间切换,而vc2只是在UIView中显示一些简单的东西。

vc1和vc2都在主要故事板中。

VC1被首先显示,然后在一个SKScene它塞格斯到VC2的一个点:

let currentViewController: UIViewController = (self.view?.window?.rootViewController)! 
currentViewController.performSegue(withIdentifier: "VC1toVC2", sender: currentViewController) 

在VC2一个短暂的延迟后,它塞格斯回VC1:

self.performSegue(withIdentifier: "VC2toVC1", sender: self) 

这些塞格斯工作。

然后,与上述相同的代码(使用相同的SEGUE):

let currentViewController: UIViewController = (self.view?.window?.rootViewController)! 
currentViewController.performSegue(withIdentifier: "VC1toVC2", sender: currentViewController) 

...的第二次它不工作从VC1到原因请看VC2。没有例外,只是vc2不显示。

我发现了一些其他职位不解决这个问题,例如: * Swift segue not working? - 表明,UI更新必须在主线程,而这一次,说明如何做,在斯威夫特3 - How do I dispatch_sync, dispatch_async, dispatch_after, etc in Swift 3? - - 我得到同样的结果 *其他职位使用视图控制器的.show或.present方法建议---我得到相同的结果

任何想法/指导?

回答

0

我解决了这个使用代表,如其他职位已经提到,例如How to call method from ViewController in GameScene。代理允许SKScene对象在其View Controller中调用/运行代码。这允许View Controller执行segue,而不是尝试从SKScene对象执行segue(不确定甚至有可能执行从SKScene对象执行的segue)。如果你不是很熟悉Swift中的代表,那么这里还有一个简单的教程https://useyourloaf.com/blog/quick-guide-to-swift-delegates/。如果它能帮助任何人,我可以发布更多细节。