2017-09-14 175 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/。如果它能幫助任何人,我可以發佈更多細節。