iPhone - 在父视图控制器中调用方法

时间:2009-11-24 00:03:01

标签: iphone uiviewcontroller macros hierarchy

已经寻找答案,但似乎无法找到明确的解决方案 - 希望有人可以在这里提供帮助!

我正在为iPhone构建一个多视图应用程序。我创建了一个名为“MainViewController”的UIViewController,它根据需要加载到其他视图中。屏幕之间有很多导航,所以我想要做的是在MainViewController中有一个“ViewSwitcher”方法,子视图控制器可以调用它来要求视图切换到另一个子视图。

如何从子控制器调用“ViewSwitcher”方法?我已经设法通过在每个子视图控制器中创建UIView *“parent”属性来实现此目的,并在首次加载子视图时填充它。然后我可以使用[parent ViewSwitcher]调用该方法。这看起来有点笨重,我担心我正在创建一些可怕的递归结构。还有更好的方法吗?

提前致谢。

2 个答案:

答案 0 :(得分:3)

这是一些看起来很笨重的东西,但它应该展示出一般的想法:

NSArray *viewControllerArray = [self.navigationController viewControllers];
int parentViewControllerIndex = [viewControllerArray count] - 2;
[[viewControllerArray objectAtIndex:parentViewControllerIndex] setBackBarButtonItemTitle:@"New Title"];

其中大部分都可以轻松替换为#define宏:

#define CurrentParentViewController [[self.navigationController viewControllers] objectAtIndex:[[self.navigationController viewControllers] count] - 2]

然后您可以按如下方式使用它:

[CurrentParentViewController setBackBarButtonItemTitle:@"New Title"];

如果你在导航堆栈中最底层的视图控制器上调用它,这显然会崩溃并烧毁,但可能你会知道你何时使用这种方法。例如,您可以致电[[self.navigationController viewControllers] count]以确保您可以运行此功能。

答案 1 :(得分:0)

您可以创建单个对象。这个cocoawithlove article在这个主题上做得非常出色。

相关问题