当另一个视图出现时,UINavigationBar会消失吗?

时间:2013-07-19 02:08:01

标签: ios objective-c uinavigationcontroller uinavigationbar uinavigationitem

我的应用中有5个视图控制器,项目以NavigationController开头。当然,当我可以将一个动作从视图1“连接”到视图2时,我的视图2将有一个导航栏和一个后退按钮。

所以我的布局是这样的:1 ViewController有4个圆形的矩形按钮,动作可以“推”到其他4个视图。由于我有5个,第五个实际上是我添加的附加视图,为了到达该视图,您必须触摸我放置在第4个视图中的圆形矩形按钮,该按钮将执行“水平翻转”到第五视图。

这是问题所在,现在我的第5个视图没有导航栏,当我在第5个视图上添加圆形矩形按钮以切换回第4个视图时,我现在看到曾经的导航栏是不再存在

我尝试手动添加导航栏以查看4& 5,我能够成功完成,但我无法通过拖动它们向他们添加“后退”按钮。有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

您可以使用自定义segue类,而不是添加后退按钮。创建一个名为“flip”的新文件,并使其成为UIStoryBoardSegue的子类。创建文件后,打开flip.m并将此代码粘贴到@end

上方
- (void) perform {

UIViewController *src = (UIViewController *) self.sourceViewController;
UIViewController *dst = (UIViewController *) self.destinationViewController;
[UIView transitionWithView:src.navigationController.view duration:.8

                   options:UIViewAnimationOptionTransitionFlipFromLeft

                animations:^{

                    [src.navigationController pushViewController:dst animated:NO];

                }

                completion:NULL];

}

接下来转到故事板并从第4个视图到第5个视图选择segue。将样式设置为custom并将segue类设置为:flip

这将允许您保留导航栏和翻转动画。

答案 1 :(得分:0)

你可以简单地在导航控制器中嵌入第五个ViewController在第五个VC中,现在会有一个导航栏。添加UIBarButton并将其链接到执行以下内容的方法:

[self.navigationController.presentingViewController dismissViewControllerAnimated:YES completion:nil];

只是为了解释,你的第五个视图的导航控制器(你嵌入它的那个)现在将被presentingViewController

解雇

此外,模态翻转segue实际上将转到导航控制器。

编辑/注意:当进行这样的转换时,我发现编程更容易,所以你可以将任何东西传递给你的(5th)viewController没问题。在这种情况下,您将创建第5个VC,然后创建以5VC为根的navigationController。

// setup of firstVC
UIViewController *firstVC = [[UIViewController alloc] initWithNibName:@"firstVC" bundle:nil];

// Create the navCon with firstVC as root
UINavigationController *navCon = [[UINavigationController alloc] initWithRootViewController:firstVC];

// Set it to flip
[navCon setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal];

// Now present it
[self presentViewController:navCon animated:YES completion:nil];