Swift iOS - 如何打印导航堆栈中尚未推送的所有子视图控制器的列表

Posted

技术标签:

【中文标题】Swift iOS - 如何打印导航堆栈中尚未推送的所有子视图控制器的列表【英文标题】:Swift iOS -How to print a list of all Child View Controllers in Navigation Stack that haven't been pushed on yet 【发布时间】:2017-04-13 13:25:07 【问题描述】:

我有一个带有 4 个 vc 的 navController:

navigationController
FirstController
SecondController
ThirdController
FourthController

当我在FirstController 上时,我想打印出所有尚未压入堆栈的子 vcs 的列表。

我试过了:

let allVCs = self.navigationController!.childViewControllers
print(allVCs.description)

我也试过了:

let allVCs = self.navigationController!.viewControllers
print(allVCs.description)

在这两种情况下,我只得到ProjectName.FirstController 的打印语句。我意识到我明白了,因为这是当前堆栈中唯一的一个。

即使它们还没有被压入堆栈,我如何找出其余的子 vcs?

//print statements I'm looking to get
ProjectName.FirstController
ProjectName.SecondController
ProjectName.ThirdController
ProjectName.FourthController

【问题讨论】:

“嘿,还没有被压入堆栈” - 你希望 navController 怎么知道它们的存在? 【参考方案1】:

导航控制器无法预测未来并告诉哪些控制器将被推入堆栈。 因此,不可能获得尚未添加到堆栈中的控制器列表。 添加后您可以获取所有详细信息。

虽然这里出现的问题是,为什么您需要未加载到堆栈中的视图控制器的信息?

【讨论】:

我希望在不使用 mainStoryBoard.instantiateViewController(withIdentifier: "FourthController") 的情况下推送到第四个VC! FourthController (我已经知道该怎么做)。我改为尝试使用 FourthVC = self.navigationController?.viewControllers[3] !出现越界错误的FourthController。我很困惑为什么它超出范围,所以我尝试打印出所有子 vcs。 navigationController.viewControllers 是当前存在于堆栈中的 UIViewControllers 数组。第四个 Vc 不存在,因此它总是会给出 index out of bound 选项。您是否希望保持 Vc 的状态。就像从 vc 中弹出并回来它应该处于相同的状态? 感谢您的澄清。我不明白您的问题“您是否希望保持 Vc 的状态。就像从 vc 弹出并返回它应该处于相同状态?”

以上是关于Swift iOS - 如何打印导航堆栈中尚未推送的所有子视图控制器的列表的主要内容,如果未能解决你的问题,请参考以下文章

iOS 以编程方式向下钻取导航堆栈

在 AppDelegate iOS 中单击 FCM 推送通知时导航到特定选项卡 - Swift

iOS Swift 从推送通知以编程方式导航到某些 ViewController

Swift - 远程通知和导航控制器流程

如何导航到推送通知上的视图控制器

如何从导航堆栈中推送/弹出uiviewcontroller时收到警报