以编程方式更改视图控制器并使用 segues

Changing view controllers programatically and using segues

我正在寻找替换此代码的方法:

let homeViewController = storyboard?.instantiateViewController(identifier: Constants.Storyboard.homeViewController) as? HomeViewController
view.window?.rootViewController = homeViewController
view.window?.makeKeyAndVisible()

这段代码是我以编程方式更改视图控制器的方式,有人告诉我它可以工作,但不是最好的使用方式。

我的故事板目前是这样设置的:

导航控制器剩下的一切都需要以编程方式控制,因为我不希望从注册和登录到主页的过程中出现转折。然而,导航控制器的一切权利,我想用 segues 来控制,但是当我这样做时,它总是以模态呈现。这就是为什么我使用该代码片段来更改视图控制器。

编辑:

我想使用 segues 和导航控制器,因为我想使用工具栏

您可以更改 segue 在故事板中呈现视图控制器的方式。您可以将其更改为覆盖全屏,这样它就不是模态的。右侧有属性你可以试验。

问题是您正在加载 HomeViewController 作为 root 视图控制器:

let homeViewController = storyboard?.instantiateViewController(identifier: Constants.Storyboard.homeViewController) as? HomeViewController
view.window?.rootViewController = homeViewController
view.window?.makeKeyAndVisible()

相反,您想加载一个 UINavigationController 作为根目录。为故事板中的导航控制器指定一个 ID(例如“mainNavController”)并将启动代码更改为:

let navController = storyboard?.instantiateViewController(identifier: Constants.Storyboard.mainNavController)
view.window?.rootViewController = navController
view.window?.makeKeyAndVisible()

现在,HomeViewController 将作为该导航控制器的“根”控制器加载,您的 segue 将“推送”而不是“呈现”。

注意:我假设您当前的代码(带有可选的 storyboard?view.window?)已经正常工作。