已经寻找答案,但似乎无法找到明确的解决方案 - 希望有人可以在这里提供帮助!
我正在为iPhone构建一个多视图应用程序。我创建了一个名为“MainViewController”的UIViewController,它根据需要加载到其他视图中。屏幕之间有很多导航,所以我想要做的是在MainViewController中有一个“ViewSwitcher”方法,子视图控制器可以调用它来要求视图切换到另一个子视图。
如何从子控制器调用“ViewSwitcher”方法?我已经设法通过在每个子视图控制器中创建UIView *“parent”属性来实现此目的,并在首次加载子视图时填充它。然后我可以使用[parent ViewSwitcher]调用该方法。这看起来有点笨重,我担心我正在创建一些可怕的递归结构。还有更好的方法吗?
提前致谢。
答案 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在这个主题上做得非常出色。