导航中实例的不确定性:UITabBarController
Posted
技术标签:
【中文标题】导航中实例的不确定性:UITabBarController【英文标题】:Uncertainty with instances in navigation: UITabBarController 【发布时间】:2014-06-05 23:02:50 【问题描述】:在我的应用程序中,我有一个 UITabBarController
,它被设置为初始视图控制器,并且故事板 ID 为“TabBarControl”。 TabBarControl 有 4 个选项卡,在第二个选项卡(index 1)之外有一系列 UIViewController
导航,其中 VC 是 ViewController
。 .
UITabBarController
> UINavigationController
('branchesControl') > VC1('branchesView') > UINavigationController
> VC2 > UINavigationController
> VC3 > @ 987654328@>VC4
我在 VC4 的导航栏上有一个名为“确认”的UIBarButtonItem
。 确认按钮触发以下IBAction方法:
- (IBAction)confirmClicked:(UIBarButtonItem *)sender
//EXECUTE NAVIGATION
UITabBarController * tabControl = [self.storyboard instantiateViewControllerWithIdentifier:@"TabBarControl"];
tabControl.selectedIndex = 1;
[self presentViewController:tabControl animated:YES completion:nil];
目标是从 VC4 导航回原来的 'branchesView'
问题是,我注意到在点击 Confirm 然后重新访问视图堆栈后,VC2 导航栏上的 UIBarButtonItem 颜色的手动设置重置为默认白色。我相信我正在创建多个实例。
如何在不创建新实例的情况下简单地导航回 branchesView,然后返回 VC2?
PS我不确定新实例是TabBarController还是或branchesView,我只知道看起来我是使用confirmClicked:
方法以某种方式创建多个实例。
【问题讨论】:
【参考方案1】:您不是回到现有的branchesView
,而是呈现一个新的UITabBarController
,其中包含一组全新的子视图控制器,这几乎肯定不是您想要做的。
相反,您需要弹回想要返回的现有视图控制器。您可以通过引用或索引来执行此操作,在您的情况下,只需弹出到根目录(前提是您想要访问的视图控制器确实位于根目录)。
你可以这样做:
[self.navigationController popToRootViewControllerAnimated:YES];
您的问题还使堆栈中的每个视图控制器看起来都包装在一个新的导航控制器中。如果是这种情况,您也需要修复它。你不应该嵌套UINavigationControllers
。相反,每个选项卡都有一个作为根,每次你想将一个新的UIViewController
推送到堆栈上时,你调用:
[self.navigationController pushViewController:viewControllerToPush animated:YES];
【讨论】:
谢谢。很长一段时间以来我得到的最有帮助的答案。告诉我,每次向前导航时都使用 segues 而不是pushViewController:
可以吗?而你的建议是离开 branchesControl 并摆脱所有其他 UINavigationController
的?
应该没问题,是的。是的,每个标签只有一个 UINavigationController
,然后去掉其他标签。
太棒了,我不知道为什么,但这一直让我感到困惑。
我推荐阅读UINavigationController reference和UITabBarController reference。他们提供了一些图片和图表,可以帮助您了解这些组件的层次结构。
我已经完全阅读了他们两个..他们现在或过去阅读它们对我来说真的没有意义,我在尝试删除时丢失了我的NavBar
UINavigationController
s.以上是关于导航中实例的不确定性:UITabBarController的主要内容,如果未能解决你的问题,请参考以下文章