我正在尝试执行以下操作。
我有一个标签栏控制器,里面有2个标签。两个选项卡都是导航控制器,每个选项卡都有一个表视图。
现在,当我在第一个选项卡中选择表格的一个单元格时,我正在推动另一个标签栏控制器,所以我想隐藏父标签栏控制器的标签栏,当我单击导航栏上的后退按钮时我想再次看到父标签栏,因为我在父标签栏视图中。
我试过hidesbottombarwhenpushed并且它隐藏了父标签栏控制器标签栏但是当我点击它时它不会带回来。
答案 0 :(得分:38)
好的,最后我得到了答案,这就是我想要做的。
self.hidesBottomBarWhenPushed = YES;
[self.navigationController pushViewController:aViewController animated:YES];
self.hidesBottomBarWhenPushed=NO;
所以基本上hidesBottomBarWhenPushed = YES,然后推动你的视图控制器,然后hidesBottomBarWhenPushed = NO;这就像一个魅力。
答案 1 :(得分:5)
接受的答案对我来说有问题。
我的应用程序有一个深度为三个UIViewController的导航。
我的解决方案是设置UINavigationControllerDelegate的委托
迅速:
self.navigationController?.delegate = self
目标-C:
self.navigationController.delegate = self;
然后实现以下委托方法
夫特:
fun navigationController(navigationController: UINavigationController, animationControllerForOperation operation: UINavigationControllerOperation, fromViewController fromVC: UIViewController, toViewController toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {
if fromVC.isKindOfClass(FirstViewController) && toVC.isKindOfClass(SecondViewController) {
self.hidesBottomBarWhenPushed = true;
}
else if fromVC.isKindOfClass(SecondViewController) && toVC.isKindOfClass(FirstViewController) {
self.hidesBottomBarWhenPushed = false;
}
return nil
}
目标-C:
-(id<UIViewControllerAnimatedTransitioning>)navigationController:(UINavigationController *)navigationController
animationControllerForOperation:(UINavigationControllerOperation)operation
fromViewController:(UIViewController*)fromVC
toViewController:(UIViewController*)toVC
{
if ([fromVC isKindOfClass:[FirstViewController class]] && [fromVC isKindOfClass:[SecondViewController class]]) {
self.hidesBottomBarWhenPushed = true;
}
else if ([fromVC isKindOfClass:[SecondViewController class]] && [fromVC isKindOfClass:[FirstViewController class]]) {
self.hidesBottomBarWhenPushed = false;
}
return nil;
}
希望它有所帮助。
答案 2 :(得分:1)
正如Apple文档所述,您无法在NavigationController上推送UITabBarController实例。并且有一个很好的理由:如果您在标签栏中选择了另一个项目,如何从推动的标签栏控制器返回?
简单的答案是:不要这样做,它会让你的用户感到困惑。您可以尝试将第一个视图控制器换成另一个可能是标签栏控制器的视图控制器,但不要使用推送范例:使用显式按钮代替将第一个标签栏控制器换成第二个,最好使用视觉转变。
您可以查看setAnimationTransition:forView:cache:
类的UIView
文档,了解如何将标签栏控制器换成另一个:
在这种情况下,容器视图将是应用程序的窗口。
答案 3 :(得分:1)
您还可以在选择tabBar控制器
时使用属性检查器隐藏它
答案 4 :(得分:0)
在FirstViewController中使用
self.hidesBottomBarWhenPushed = true
在你的SecondViewController中使用
override func willMoveToParentViewController(parent: UIViewController?) {
if parent == nil {
var viewControllers = self.navigationController!.viewControllers
if ((viewControllers[viewControllers.count - 2]).isKindOfClass(FirstViewController.self)) {
(viewControllers[viewControllers.count - 2] as! FirstViewController).hidesBottomBarWhenPushed = false
}
}
}
答案 5 :(得分:0)
在要推送的控制器中设置hidesBottomBarWhenPushed = true
。
用于隐藏放入prepare for segue
的所有控制器
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
segue.destination.hidesBottomBarWhenPushed = true
}