【发布时间】: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