从弹出框控制器调用模态视图的方法

Posted

技术标签:

【中文标题】从弹出框控制器调用模态视图的方法【英文标题】:Calling method on modalview from popover controller 【发布时间】:2011-03-29 13:20:14 【问题描述】:

我有一个 iPad 应用程序,它包含一个 splitviewcontroller - 从 splitview 的详细视图中,我打开一个 modalviewcontroller(NearbyViewController),它有一个按钮,显示一个带有选择器的弹出框(RadiusViewController)。这工作得很好,但是当我在选择器中选择一个值时,我想在 modalview 控制器上调用一个方法,但我不知道该怎么做?

我的“NearbyViewController”导入“RadiusViewController.h”,因为我访问“RadiusViewController”中的某些数据,但我还需要能够将数据从 RadiusViewController 发送回 NearbyViewController,但如果我导入 NearbyViewController.h RadiusView 中的文件,然后由于它们尝试相互导入而出现编译错误。

【问题讨论】:

【参考方案1】:

这是一个常见问题,很容易解决。解决方案只是在 .m 文件中进行导入。如果您需要在 .h 文件中知道类型,您只需使用前向声明即可。

@class ClassName;

就这么简单。

编辑:更详尽的解释:

通常在 .h 文件中不需要知道类的方法和属性。您需要做的就是告诉编译器有一个名为ClassName 的类。编译器此时不需要知道有关该类的任何其他信息。在 .m 文件中,您需要知道该类的方法和属性,否则您将无法使用它。因此,在 .m 文件中导入类。

要明确一点:

// SomeClass.h
@class ClassName;

// SomeClass.m
#import "ClassName.h"

这称为前向声明。您可以通过谷歌搜索了解更多信息或阅读有关编程的介绍性书籍。这是一个非常基本的编程概念,学习它很重要。

【讨论】:

我已经尝试过了,但效果不太好。它可以看到类,但它不识别我在该类中声明的任何方法或实例变量。但是如果我包含头文件,它可以很好地识别方法和变量,所以使用@class 名称时会有所不同。 @Milk78 您所描述的正是@class#import 的工作原理。也许我应该更新我的答案以进一步解释。 非常感谢您的补充说明 :) 可怕的是我已经开发了 10 年,而我在应用商店中有 5 个应用程序却不知道有关前向声明的详细信息 - 也许是时候学习它了 :D

以上是关于从弹出框控制器调用模态视图的方法的主要内容,如果未能解决你的问题,请参考以下文章

从弹出框 VC 中返回第一个视图控制器

从弹出控制器推送视图控制器

在弹出窗口中呈现模态视图

当模态视图可见且 iPad 旋转时,UIPopover 的内容会更改为随机方向

从弹出窗口呈现视图

通过弹出框 didselcet 关闭模态视图