调用另一个已初始化的视图控制器的方法

Posted

技术标签:

【中文标题】调用另一个已初始化的视图控制器的方法【英文标题】:Calling a method of another viewcontroller already initialized 【发布时间】:2013-09-23 23:51:09 【问题描述】:

我正在尝试从另一个视图控制器调用一个方法,比如 HeyViewController 已经初始化。如何通过重新初始化该视图控制器的新实例来调用它的方法?

例如 HeyViewController *hey =[[HeyViewController alloc]init]; [嘿showMe];

不好,因为它会在视图控制器已经初始化时对其进行初始化。

是的,我该怎么做?

编辑:

抱歉,不清楚。由于应用程序使用故事板的流程,有问题的视图控制器已在此视图控制器之前初始化。因此视图控制器正在运行,但该视图控制器的实例不在当前视图控制器中。

【问题讨论】:

【参考方案1】:

只需在您已经实例化的任何 HeyViewController 实例上调用 showMe。

【讨论】:

对不起,我可能没有正确解释。当前视图控制器没有该视图控制器的实例。它被初始化是因为要通过目标视图控制器到达当前视图控制器。 视图控制器没有“[其他]视图控制器的实例。”它们存在或不存在。问题是获取指向现有视图控制器的指针。 如果您尝试访问的 VC 是您从中访问它的 VC 的 父级,那么您可以简单地获取当前 VC 的 parentViewContoller 属性。如果没有,您可能需要从根控制器开始并遍历控制器层次结构以找到您想要的控制器。请查看this question 了解总体思路。【参考方案2】:

您面临的问题是如何获得指向现有视图控制器的指针。为了回答这个问题,您需要考虑如何创建其他视图控制器。

您的视图控制器流程是什么?谁创建了您的“嘿”视图控制器?需要访问“嘿”视图控制器的视图控制器是否可以访问创建“嘿”视图控制器的视图控制器?

如果答案是肯定的,那么让创建“嘿”视图控制器的视图控制器在它的 prepareForSegue 方法中保存一个指向它的指针。然后在需要时向创建视图控制器询问指向“嘿”视图控制器的指针。

如果您的第三个视图控制器无法访问“嘿”视图控制器的创建者,那么您的“嘿”视图控制器是否只有 1 个实例?

如果您可以确定您的“Hey”视图控制器只会有一个实例,则将“currentHeyViewController”类方法添加到您的“Hey”视图控制器中。将私有全局“gCurrentHeyVC”添加到“Hey”VC 的标头。在 currentHeyViewController 类方法中返回全局值。在您的 init 方法中设置全局,并在您的 dealloc 方法中设置全局。

编辑:正如@gWiz 在下面指出的那样,上面的最后一个选项是对如何将“嘿”视图控制器变成单例的快速描述。

【讨论】:

你的最后一段是“如何制作单身”问题的最快指南。+1

以上是关于调用另一个已初始化的视图控制器的方法的主要内容,如果未能解决你的问题,请参考以下文章

从 Facebook API iOS 的另一个视图控制器调用方法

从另一个控制器调用一个控制器的视图

UITableViewController 作为 ChildViewController 不调用委托方法

在视图初始化之前调用视图控制器中的方法 - iPhone iOS 5 SDK

与初始视图控制器的视图生命周期方法相关的 appdelegate 方法何时被调用? [关闭]

如何从模态视图控制器调用呈现视图控制器的方法