【问题标题】:Can you push to a viewController and be a part of that controllers navigation?您可以推送到 viewController 并成为该控制器导航的一部分吗?
【发布时间】:2021-08-30 08:36:26
【问题描述】:

假设我有以下storyboard 结构

navigation controller -> class A -> class B

navigation controller 分开,我有class C

现在我想从class C´ to class Band end up inside thenavigation controllerof whichclass Bbelongs. So if I press back, I end up inclass A`导航。

我尝试创建一个单独的类,从 UINavigationController 子类化

class MyNavigation: UINavigationController {}

然后在storyboard 中我将navigationController 设置为这个类。

class C我尝试了以下代码:

let navigation = UINavigationController() as? Myavigation

let storyboard = UIStoryboard(name: "MyStoryboard", bundle: nil)

guard let viewController = storyboard.instantiateViewController(withIdentifier: "MyId") as? FirmwareViewController else { return }
           
navigation?.pushViewController(viewController, animated: true)

但这并没有起到任何作用。是的,它通过了警卫。那么有没有可能实现我想要做的事情?

【问题讨论】:

  • 您说“我想从 C 类导航到 B 类,并最终进入 B 类所属的导航控制器。”不清楚你的意思。导航控制器管理子视图控制器的“堆栈”。如果您想在堆栈上显示class C 视图控制器,只需将其推送到堆栈上,就像您对任何其他视图控制器所做的那样。有些方法会弹回堆栈上的任何视图控制器,包括根视图控制器。 (请参阅 popToRootViewController(animated:)popToViewController(_:animated:)。只需使用其中之一。
  • 而这段代码:let navigation = UINavigationController() as? Myavigation 存在致命缺陷。 UINavigationController() 构造创建了一个全新的导航控制器,它不属于您的视图层次结构,并且会在您退出函数后立即释放。另外,as? Myavigation 转换将失败,导致整个表达式返回 nil。
  • @DuncanC 啊,好的,所以我实际上不能从外部跳入导航控制器,如果这有意义吗?我问的原因是 c 类不是也不能成为导航控制器的一部分,但我仍然需要从 C 转到 B。但我想这必须在导航控制器内部完成.
  • “不是导航控制器的一部分”是什么意思?您的意思是您不希望视图控制器 C 位于导航堆栈中?
  • 没错,C类不能成为栈的一部分。

标签: ios swift uinavigationcontroller segue


【解决方案1】:

我认为你可以使用以下 -

let cNavCtrl = UINavigationController(rootViewController: c)
cNavCtrl.modalPresentationStyle = .fullScreen
b.navigationController?.present(cNavCtrl, animated: false, completion: nil)

然后从c 内部,你可以添加一个backButton/cross 来调用跟随-

self.navigationController?.dismiss(animated: true, completion: nil)

这样 - 你的 c 永远不会是 b.navigationController 的一部分,从 c 点按后背会将你带回 b

【讨论】:

  • 导航控制器中的导航控制器?这将创建嵌套导航栏,这将是一个令人困惑的用户体验。
  • 这是一个演示,而不是推动。
  • 原来如此。我的错。
  • 这就是我最终要做的。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-11
  • 2016-05-24
  • 1970-01-01
相关资源
最近更新 更多