这是我的故事板配置:
导航控制器 - >查看控制器A - >推>查看控制器B
^
|
莫代尔
^
|
查看控制器C
我想要实现的目标:在视图C中按下按钮时,将直接以模态方式打开视图B(不显示视图A的任何部分)。此外,View B将有一个导航后退按钮来查看A.
要实现这一目标,
结果是,第一个视图A以模态方式打开,并且在显示它很短的时间后,使用推动动画打开视图B(视图B可以导航回视图A,这很好)。但我不希望任何时候都显示View A.我怎样才能做到这一点?
编辑:
为了更好地可视化,我正在添加一个屏幕截图,其中包含更多示例案例以支持:
以下是我想支持的一些案例:
答案 0 :(得分:2)
首先,一些更正:那些不是视图而是视图控制器。而且“视图A”没有被推入UINavigationController
,但它是根。
之后,我建议将“视图C”中的segue作为一个展开区域,并通过使用IBAction
推送“视图B”来实现“视图A”中的[[self navigationController] pushViewController:bViewController animated:NO]
。
编辑(添加一些细节):
我认为在ViewControllerA
的{{1}}中,您以非动画的方式呈现viewWillAppear
。
在ViewControllerC
中实施(IBAction)unwindAndThenGoToB:(UIStoryboardSegue *)segue
之类的展开操作
在故事板中,将ViewControllerA
中的按钮连接到退出图标,然后选择之前定义的方法。
然后使用我之前写的push call实现该方法
ps:在Apple的网站上有很多文档。
答案 1 :(得分:0)
使用delegates.Decalre协议在你想要的类中实现它,并定义那些方法并在你想要的视图控制器中调用方法。没有多少方法可以调用某些视图并显示返回按钮以进入不同的视图。模式视图只是一个概念。你可以使用委托方法来调用你想要的任何类。
答案 2 :(得分:0)
我有办法这样做: -
您需要在viewC到viewA中不设置segue动画,如下图所示。然后设置segue的segue标识符,从viewA到viewB,即“viewB”,并在你的viewA .m文件中添加以下代码,
- (void)viewDidLoad {
[super viewDidLoad];
// Place your conditional check here.
[self performSegueWithIdentifier:@"viewB" sender:self]; //Will directly lead to viewB and viewA won't be shown as no animation is there from viewC to viewA.
}
你的休息时间也是如此。
答案 3 :(得分:0)
我自己找到了解决方案。
首先,我发现了我原来提出的
在View Controller A的viewDidLoad方法中,我检查变量 ' directlyProceedToViewB'如果是,我打电话 ' performSegueWithIdentifier'转到视图B
在iOS 7上按预期工作,但在iOS 8上不起作用。
所以解决方案是,在View Controller A的viewDidLoad方法中,如果' directProceedToViewB'是,而不是调用performSegueWithIdentifier,请使用以下代码:
ViewControllerB *destVC = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewControllerBStoryboardID"];
[self.navigationController pushViewController:destVC animated:NO];