iPhone问题中的视图层次结构



无论如何我都不会说这是一个好的设计。我继承了一些已经存在的东西。总之,有一个TabController。在这个标签中,有两个视图根据UISegmentController按需加载。这两个ViewController都是另一个ViewController的子类它有我需要的功能。

当我在TabController中,我想创建一个使用两个viewcontroller的一些超类方法的方法。我如何获得访问选项卡的当前视图控制器,因为它是按需加载的?我是否需要有一个基本控制器类型的引用,并在按需加载时将其设置为当前视图控制器?谢谢。

要在屏幕上显示活动选项卡,你可以使用[self.tabBarController selectedViewController],它会给你一个UIViewController Reference。如果你想使用这些方法,那么你可以将它转换为你的ViewController超类,然后像这样调用方法(其中self.tabBarController是你的标签栏控制器):

MySuperClassViewController *viewC = (MySuperClassViewController *)[self.tabBarController selectedViewController];
[viewC someMethodDeclaredHere];

首先,用一点术语来澄清一些潜在的混淆:我假设你指的是控制各种视图控制器的UITabBarController。此外,似乎您正在使用的UISegmentedControl而不是视图控制器,而是UIView的子类。我希望这些只是拼写错误,而不是概念上的问题。

关于你所说的"当我在选项卡控制器中"的含义仍然存在一些歧义。我假设您想要将代码放入表示UITabBarController的类中。但是为什么呢?把这些方法放到适当的视图控制器中,如果是之前需要做的事情,放到你的app委托中。然而,如果这些方法在视图控制器超类中,它们应该与这个视图控制器所需的逻辑有关。

如果你需要的方法在其他地方,即在你的视图控制器之外,考虑创建一个单独的#include文件,并把方法在那里。或者,你可以使用你的应用程序委托,它可以通过[[UIApplication sharedApplication] delegate]方便地访问。

最新更新