以编程方式更改视图控制器并使用 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?
)已经正常工作。
我正在寻找替换此代码的方法:
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?
)已经正常工作。