0

我计划让我的应用程序UIViewController在 App Delegate 中有一个根,基本上可以分为两个UIViewControllers,每个都UIViewControllers将有一些UINavigationControllers推到它们上,可能有一个UITabBarController,不太确定,但主要问题是我想从任何视图从一个UIViewController堆栈转移到另一个,并维护视图层次结构。

当我想从一个UIViewController堆栈更改到另一个堆栈时,我考虑过调用 App 委托:

MainClass *appDelegate = (MainClass *)[[UIApplication sharedApplication] delegate];
[appDelegate.viewController someMethod];

并以这种方式过渡,但这似乎有点笨拙。还考虑过通过堆栈将引用传递给根UIViewController并调用方法在UIViewControllers.

哪种方式会更好?还是有一种我没有想到的方法是首选的方法?

4

2 回答 2

1

AUITabBarController为您提供了该功能。如果你有一个作为你的根视图控制器和两个选项卡,每个选项卡中都有一个导航控制器,那么你基本上就完成了。如果您不想在底部显示选项卡栏,您可以将其隐藏,然后在某些事件之后从代码触发选项卡切换。这很简单:)

于 2013-10-24T07:21:55.950 回答
1

你的意思是你有一个根视图控制器,这个根 VC 管理两个视图控制器,这两个控制器管理许多子视图控制器?

如果是这样,您可以尝试使用自定义遏制控制器。每次您想将堆栈从一个更改为另一个时,只需委托给 rootVC 即可。

- (void)moveToAnotherController:(UIViewController *)vc
{
    [self displayContentController:vc];
}

- (void)displayContentController:(UIViewController *)content
{
    [self addChildViewController:content];
    [self.view addSubview:content.view];
    [content.view setFrame:self.view.bounds];
    [content didMoveToParentViewController:self];

}

//remove child controller from container
- (void)hideContentController:(UIViewController *)content animated:(BOOL)animated
{
    [content willMoveToParentViewController:nil];
    [content.view removeFromSuperview];
    [content removeFromParentViewController];
}
于 2013-10-24T07:25:54.390 回答