2

一直在寻找这个问题的答案,但似乎找不到明确的解决方案 - 希望有人能在这里提供帮助!

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

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

提前致谢。

4

2 回答 2

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]以确保您可以运行它。

于 2009-11-24T07:44:12.950 回答
0

您可以创建一个单例对象。这篇cocoawithlove 文章在这个主题上做得非常出色。

于 2009-11-24T01:00:11.270 回答