2010-04-10 77 views
0

Ola Folks,迭代'Active'视图控制器

在iPhone应用程序中,我使用addSubView:SomeViewController.view方法显示不同的视图。

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

我知道如何迭代视图,我只是看不到如何访问这些视图的视图控制器。我正在寻找的东西,会给我对UINavigationController :: ViewControllers所做的视图控制器的访问类型。

我以为我可以逃脱:

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

但这没有达到预期效果。

如果有人有办法做到这一点,请与我分享。

-isdi-

+0

只要有用,我想知道在一系列AddSubview调用之后堆栈上的viewcontrollers是什么。在这种特殊情况下,我想访问其他四个视图控制器下方的特定视图控制器。我会很高兴地向在发布后不到两分钟的时候降级这个问题的人说。 – ISDi 2010-04-10 22:52:50

回答

1

视图不保留对视图控制器的引用(或了解一般视图控制器的任何东西),所以你必须持续跟踪绘制自己。如果你把所有的视图控制器的阵列中的viewControllers,你可以这样做:

- (UIViewController *) viewControllerForView:(UIView *)view { 
    for (UIViewController *viewController in viewControllers) 
     if (viewController.view == view) 
      return viewController; 
    return nil; 
} 
+0

奥拉汤姆。荡。我希望在尝试不同的方法半天后情况并非如此。感谢你的回答,我将在RootViewController中实现某种跟踪机制。 – ISDi 2010-04-10 23:18:18

0

的观点与拥有它是由具有设置为视图控制器视图控制器交互的标准方式代表或视图的行动目标。该视图旨在不具有关于委托或操作目标的任何细节。

如果您已经实现了自己的视图,只需添加一个成员来保存对视图控制器的引用。或者为视图采用一个委托模型,以便委托的类别无关紧要。

如果您将视图看作一个堆栈,并且希望沿着一侧维护一堆视图控制器,类似于UINavigationController为您所做的操作,则必须手动执行此操作。通过调用[myViewControllerArray addObject:viewController]将addSubview:viewController.view的每次调用联系起来,并在从视图层次结构中删除视图时,从该数组中移除viewController。

+0

Hello Drawnonward, 我没有想过将ViewController设置为委托。我喜欢这个想法。感谢名单。如果我能给你一点或什么,我会的。 – ISDi 2010-04-11 13:50:15