代码之家  ›  专栏  ›  技术社区  ›  ISDi

迭代“活动”视图控制器

  •  0
  • ISDi  · 技术社区  · 16 年前

    奥拉乡亲,

    在iphone应用程序中,我使用addsubview:someviewcontroller.view方法显示不同的视图。

    我希望至少能够记录正在显示的视图层次结构中的视图控制器。我希望能够获得一个特定视图控制器的句柄。

    我知道如何迭代视图,只是不知道如何访问这些视图的视图控制器。我正在寻找一种可以让我访问视图控制器的类型,这是uinavigationcontroller::view controllers所做的。

    我以为我可以逃脱:

    for (UIViewController* oVC in [self.view subviews])

    但这并没有达到预期的效果。

    如果有人有办法,请和我分享。

    - ISDI

    2 回复  |  直到 16 年前
        1
  •  1
  •   Tom    16 年前

    视图不保留对其视图控制器的引用(或对视图控制器的一般了解),因此您必须自己跟踪该映射。如果将所有视图控制器保持在一个数组中 viewControllers ,你可以这样做:

    - (UIViewController *) viewControllerForView:(UIView *)view {
        for (UIViewController *viewController in viewControllers)
            if (viewController.view == view)
                return viewController;
        return nil;
    }
    
        2
  •  0
  •   drawnonward    16 年前

    视图与拥有它的视图控制器交互的标准方法是将视图控制器设置为视图的委托或操作目标。视图设计为不包含任何有关委托或操作目标的详细信息。

    如果已经实现了自己的视图,只需添加一个成员来保存对视图控制器的引用。或者为视图采用委托模型,这样委托是什么类并不重要。

    如果您将视图视为一个堆栈,并希望在其旁边维护一个视图控制器堆栈,与uinavigationcontroller为您所做的类似,则必须手动执行此操作。将addsubview:viewcontroller.view的每个调用与对[myviewcontrolleray addobject:viewcontroller]的调用结合起来,并在视图从视图层次结构中移除时从数组中移除viewcontroller。