我正在努力实现可在2个View Controller,vc1和vc2之间移动的代码。
vc1在两个SKView之间切换,而vc2只是在UIView中显示一些简单的东西。
vc1和vc2都在主故事板中。
首先显示vc1,然后在SKScene中的某个点显示vc1:
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更新必须在主线程中,并且这个显示如何在Swift 3中执行此操作 - How do I dispatch_sync, dispatch_async, dispatch_after, etc in Swift 3? - 我得到相同的结果 *使用视图控制器的.show或.present方法建议的其他帖子---我得到相同的结果
有什么想法/指导吗?
答案 0 :(得分: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/。我可以发布更多细节,如果它可以帮助任何人。