Swift 中视图控制器之间的基本转换
Posted
技术标签:
【中文标题】Swift 中视图控制器之间的基本转换【英文标题】:Basic Transitioning Between View Controllers in Swift 【发布时间】:2017-09-14 00:50:13 【问题描述】:我正在努力实现将在 2 个视图控制器 vc1 和 vc2 之间移动的代码。
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)
这些segues有效。
然后,使用与上面相同的代码(使用相同的 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 方法 --- 我得到相同的结果
有什么想法/指导吗?
【问题讨论】:
【参考方案1】:我使用其他帖子提到的委托解决了这个问题,例如How to call method from ViewController in GameScene。委托允许 SKScene 对象在其视图控制器中调用/运行代码。这允许视图控制器执行转场,而不是尝试从 SKScene 对象执行转场(甚至不确定是否有可能,从 SKScene 对象执行转场)。如果您对 Swift 中的委托不太熟悉,这里还有一个简单的教程 https://useyourloaf.com/blog/quick-guide-to-swift-delegates/。如果对任何人有帮助,我可以发布更多详细信息。
【讨论】:
以上是关于Swift 中视图控制器之间的基本转换的主要内容,如果未能解决你的问题,请参考以下文章
创建一个 segue 并通过 Swift 在两个视图控制器之间附加它?