【问题标题】: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 中的文件,然后由于它们尝试相互导入而出现编译错误。

【问题讨论】:

    标签: ipad uisplitviewcontroller uipopovercontroller modalviewcontroller


    【解决方案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
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-14
    • 1970-01-01
    相关资源
    最近更新 更多