iOS:如果不使用 UINavigationController,以编程方式查看导航堆栈中的 View Controller ?

标签 ios xcode uinavigationcontroller storyboard

是否可以查看导航堆栈中有哪些 View Controller ? Swift 和 iOS 的新手,只是想确保导航正常进行并且 View Controller 不会无意中堆叠。

澄清一下,您似乎可以在 UINavigationController 中使用 viewControllers 属性,但出于学习目的,我们没有使用一个导航 Controller ,并通过退出 segues 手动进行导航。

如果不使用 UINavigationController,您能否以编程方式打印出 View Controller 层次结构?

最佳答案

Is it possible to see which view controllers are in the navigation stack?...Can you programmatically print out the view hierarchy if not using a UINavigationController?

您在这里谈论的是两件完全不同的事情。 View 和 View Controller 不是同一类对象。它们确实都倾向于用在像它们自己这样的对象的有向图中,但是这两种对象的图是完全不同的。也就是说,导航 Controller 是一种保存其他 View Controller 列表的 View Controller ,并且(单独地) View 保存它包含的 View 数组。最后,大多数 View Controller 管理通常包含其他 View 的单个 View 。

查看 View 层次结构的一种简单方法是在其中一个 View Controller 的某行上设置断点,然后使用调试器po [self.view recursiveDescription],这将打印 (在调试器中)该 View Controller 管理的 View 和 subview 的描述。

一个更简单的方法是使用 Xcode 的漂亮 View 调试器,它为您提供了一个可以在 3D 中检查的分层 View :

layered view inspector

该检查器的图标看起来像一个矩形叠加在另一个矩形之上:

debug image hierarchy

您当然可以打印出您的代码可以访问的任何对象图,但从您的评论来看,您似乎必须编写一个方法来执行此操作。如果您不使用导航 Controller ,则不会打印出“导航堆栈”。当然,您可以实现您自己的导航堆栈版本,但是接下来由您提供一种检查它的方法。

关于iOS:如果不使用 UINavigationController,以编程方式查看导航堆栈中的 View Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31193774/

相关文章:

ios - 使用observeSingleEvent更新Firebase本地数据

xcode - PackageMaker 什么都不安装

ios - 从 iOs 10 设备中删除配置文件

ios - 有没有办法在 Storyboard中弹出 View Controller ?

iphone - setStatusBarOrientation问题

ios - UITableView 删除行在 iOS 中崩溃

mysql - 将 iOS 应用程序中的照片存储到服务器中

xcode - SVN使用Xcode 4忽略模式

ios - 栏按钮项目从导航 Controller 中消失

iOS NSURLSessionUploadTask 响应数据