获取对当前可见视图控制器的引用

Posted

技术标签:

【中文标题】获取对当前可见视图控制器的引用【英文标题】:Get a reference to the currently visible view controller 【发布时间】:2013-08-19 12:14:59 【问题描述】:

我有一个UIAlertView。当用户点击警报视图中的按钮时,我想显示一个新的UIViewController

为了实现这一点,我需要知道哪个视图控制器当前在屏幕上可见,因为那个特定的视图控制器是展示新视图控制器的正确选择。

问题是我的应用中有一个复杂的视图控制器层次结构,包括UINavigationControllerUITabBarController(等等)。所以我不能简单地使用self.visibleViewController 来获取当前可见的视图控制器。

我找到了possible solution on ***,但我想找到一个更简洁的解决方案,而不必深入研究整个视图控制器堆栈。

【问题讨论】:

我不确定这是否有效,我还没有测试过,但是如果你正在创建一个 UIAlertView 并在最后一个可见的 UIViewController 中呈现它,这并不意味着“委托" 那个 UIAlertView 是你最后一个可见的视图控制器? 我有点困惑。您必须在某处设置 UIAlertView 的代码。你在哪个 ViewController 上设置了? UIAlertView 的代表不一定是UIViewController。它可以是任何符合UIAlertViewDelegate 协议的类。在我的例子中,代表实际上是一个UIViewController,但它是一个特定的,并不总是可见的。 @Puneet:UIAlertView 不一定由特定的UIViewController 提供。相反,我使用[alertView show]。我可以从代码中的任何位置调用该方法,因为 UIAlertView always creates its own window. 【参考方案1】:

UINavigationController 有一个名为topViewController 的属性。 也许对你有帮助。

【讨论】:

我需要一个不依赖于视图控制器类型的解决方案。

以上是关于获取对当前可见视图控制器的引用的主要内容,如果未能解决你的问题,请参考以下文章

如何在非视图控制器类中获取可见/当前视图控制器?迅速

IGListKit:获取当前可见的单元格索引

仅将子视图添加到当前视图的 UINavigationBar

如何从自定义表格视图单元类中获取对表格视图控制器的引用

iOS如何获取对带有segue的storyboard容器中嵌入的视图控制器的引用?

在当前可见之前关闭先前呈现的模态视图控制器