【问题标题】:get the UIViewController from a UIView从 UIView 获取 UIViewController
【发布时间】:2012-03-14 21:15:51
【问题描述】:

我有一个 UIViewController,它在其中添加 UIView X 作为子视图。从我的 X 类中是否可以访问 UIViewController A?

【问题讨论】:

标签: iphone objective-c ios ipad


【解决方案1】:

Cocoa 没有提供访问它的属性。说实话,如果你正在访问它,你很可能违反了MVC 的一些原则。

【讨论】:

    【解决方案2】:

    你可以破解一些东西,但 SDK 中没有任何东西存在,而且有充分的理由。

    我同意 Kurt 的观点,并且会补充说,通常是视图控制器本身,您想要维护对它的引用,从而维护对其视图的引用。 UIView 子类中的代码本身不应该关心它是否由 VC 拥有,或者就此而言只是另一个视图的子视图;它的责任是维护自己的房子。例如,您为 iPhone 编写一个视图,然后再移植到 iPad。如果它引用了特定于 iPhone 的 VC,则在将其包含在 iPad 类型的 VC 中时,您必须努力清除所有这些功能。

    这个想法是 UIKit 是在抽象层中构建的。 LoA 范式的一个特点是层通常应该与其他兄弟层以及下面的层交互。但是通常没有必要(或不可能)让一个层向上看一个更抽象的概念。 UIViewController 及其变体与 UIKit 中的类一样抽象。可以说,它们处于食物链的顶端——没有其他类消耗它们的功能。要求指针仅指向侧面或向下也有助于防止循环引用。

    【讨论】:

      【解决方案3】:

      如果你不打算将它上传到 App Store,你可以使用 UIView 的私有方法。

      @interface UIView(Private)
      - (UIViewController *)_viewControllerForAncestor;
      @end
      
      // From the X Class
      UIViewController *vc = [self _viewControllerForAncestor];
      [vc doStuff];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-10-11
        • 2010-11-23
        • 1970-01-01
        • 2011-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多