我计划在我的App中在App Delegate中设置一个根UIViewController
,它基本上分为两个UIViewControllers
,每个UIViewControllers
都有一个数字UINavigationControllers
被推到他们身上,可能有一个UITabBarController
,还不太确定,但主要问题是我想从任何视图转移从一个UIViewController
堆栈到另一个,并维护视图层次结构。
当我想从一个UIViewController
堆栈更改为另一个堆栈时,我考虑过调用App委托:
MainClass *appDelegate = (MainClass *)[[UIApplication sharedApplication] delegate];
[appDelegate.viewController someMethod];
并以这种方式转换,但这似乎是一种hacky方式。还考虑将引用通过堆栈传递给根UIViewController
并调用方法在UIViewControllers
之间进行更改。
哪种方式会更好?或者有没有一种方法我没有想过这是首选方式?
答案 0 :(得分:1)
UITabBarController
为您提供完全相同的功能。如果您有一个作为根视图控制器,并且每个选项卡中有两个带有导航控制器的选项卡,那么您基本上已经完成了。如果您不想在底部显示标签栏,则可以隐藏它,然后在某些事件后触发代码中的标签切换。它很直接:)
答案 1 :(得分: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];
}