在 NavigationController 上附加了多个 View Controller 的应用程序中,如何确定当前显示的 View 是什么?

How to determine, in an app with several ViewControllers attached to NavigationControllers, what the currently displayed View is?

我有一个 iOS 8 应用程序,使用 Objective-C 构建,带有 TabBarController,有 3 个选项卡。每个 Tab 链接到一个 NavigationController(所以有 3 个 NavigationController),每个 NavigationController 都有一个堆栈,里面有几个 ViewController

因此,在任何给定时间,应用程序的用户都可以在 NavigationController 1 中的 ViewController 2(这意味着选择了选项卡 1)。然后跳到选项卡 3 (NavigationController 3) 并看到 ViewController 1,比方说。

问题是,无论应用用户看到的是哪个 ViewController(因此,无论哪个 NavigationController / TabBar 选项卡有效),我如何确定(即获取 pointer/reference 到)正在显示哪个 ViewController

是否需要获取TabBarController,获取其NavigationControllers的数组,然后获取其ViewControllers的数组,循环遍历每个元素,看哪个是顶部 ViewController?

或者是否有一种快捷方式来确定正在显示哪个 ViewController - 从而获得其父级 NavigationController 以及 Tab/TabBar?那么,比如,在 iOS 中是否有一些 "global" 句柄指向活动视图并在任何给定时间显示?

非常感谢!

你很接近。从选项卡控制器中,从所选选项卡中获取导航控制器。从 UINavigationController 中,只需使用 topViewController 属性 即可获取当前显示的视图控制器。

UITabBarController *tabController = ... // a reference to the tab controller
UINavigationController *navController = (UINavigationController *)tabController.selectedViewContrpller;
UIViewController *viewController = navController.topViewController;