2017-05-03 84 views
0

我有一个故事板具有以下结构斯威夫特 - 问题与导航到根控制器

NavigationController -> HomeViewController -> StoryBoardSegue (Id: SignUpViewController) -> SignUpViewController -> StoryBoardSegue (Id: SignupStep1ViewController) -> SignUpStep1ViewController -> StoryBoardSegue (Id: SignUpStep2ViewController) -> SignUpStep2ViewController 

上述结构是谁没有登录的用户,我在这一点上停止了SEGUE链,因为,我想一个完全不同的导航结构只要用户登录时,对现在的结构是

Navigation Controller -> MainMenuViewController 

在每个屏幕的,我使用下面的方法

重定向用户到新的ViewController
performSegue(withIdentifier: "SignInViewController", sender: self) 
performSegue(withIdentifier: "SignUpViewController", sender: self) 
performSegue(withIdentifier: "SignupStep1ViewController", sender: self) 
performSegue(withIdentifier: "SignUpStep2ViewController", sender: self) 

一旦用户到达这是SignUpStep2ViewController,但由于没有赛格瑞在这一点上存在,我使用下面的代码将用户重定向到另一个视图控制器赛格瑞链的最后一个点。

let mainMenuViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "MainMenuViewController") 
present(mainMenuViewController, animated: true, completion: nil) 

到目前为止好,现在在MainMenuViewController当用户点击注销,我想利用用户HomeViewController

因为没有赛格瑞MainMenuViewController和HomeViewController之间存在着我无法使用performSegue,我尝试下面的代码

let homeViewController = self.storyboard?.instantiateViewController(withIdentifier: "HomeViewController") 
self.present(homeViewController!, animated:true, completion:nil) 

的问题是,由于某种原因,导航菜单不SignUpViewController显示如果我使用的代码,从MainMenuController,我怎么回去HomeViewController?

回答

0

我此使用unwindSegue,用于参考,在HomeViewController解决,添加以下代码

@IBAction func unwindToVC(segue: UIStoryboardSegue) { } 

并在故事板,拖动+控制从MainMenuViewController退出并选择

先前创建的方法

然后运行下面的代码

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

而这完美的作品,这要归功于下面的文章这让我unders T和问题

https://www.andrewcbancroft.com/2015/12/18/working-with-unwind-segues-programmatically-in-swift/
http://ashishkakkad.com/2015/04/work-with-unwind-segue-in-swift-language-ios-8/