【问题标题】:Changing view controllers programatically and using segues以编程方式更改视图控制器并使用 segue
【发布时间】:2021-05-18 06:02:11
【问题描述】:

我正在寻找替换此代码:

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

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

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

导航控制器剩下的所有东西都需要以编程方式控制,因为我不希望从注册和登录到主页。然而,导航控制器的一切都是正确的,我想用 segues 来控制,但是当我这样做时,它总是以模态方式呈现。这就是我使用该代码 sn-p 更改视图控制器的原因。

编辑:

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

【问题讨论】:

  • 您是否有意在视图控制器上隐藏导航栏?

标签: ios swift storyboard segue


【解决方案1】:

您可以更改 segue 在情节提要中显示视图控制器的方式。您可以将其更改为覆盖全屏,使其不是模态的。右侧有一些属性可以试验。

【讨论】:

  • 更改它们没有用,这就是我问的原因,因为我很困惑
【解决方案2】:

问题是您将 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 将作为导航控制器的“根”控制器加载,您的转场将“推送”而不是“呈现”。

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

【讨论】:

  • 这很完美!非常感谢! (我可以在 8 小时内奖励赏金,所以会这样做)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-22
  • 1970-01-01
  • 1970-01-01
  • 2016-05-05
  • 2013-11-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多