iOS故事板:如何使用第一个视图的后退按钮切换到第二个视图,但不显示第一个视图

时间:2014-09-30 09:02:41

标签: ios objective-c uinavigationcontroller storyboard

这是我的故事板配置:

导航控制器 - >查看控制器A - >推>查看控制器B
^
|
莫代尔
^
|
查看控制器C

我想要实现的目标:在视图C中按下按钮时,将直接以模态方式打开视图B(不显示视图A的任何部分)。此外,View B将有一个导航后退按钮来查看A.

要实现这一目标,

  • 我设置了插图故事板。
  • 我在View C和View A / B的导航控制器之间创建了一个segue。
  • 在View Controller C的'prepareForSegue'方法中,我获得了View Controller A的实例作为导航中的第一个元素。在这个例子中,我设置了一个像'directProceedToViewB = YES'的变量。
  • 在View Controller A的viewDidLoad方法中,我检查变量'directProceedToViewB',如果是YES,我调用'performSegueWithIdentifier'来转换为View B

结果是,第一个视图A以模态方式打开,并且在显示它很短的时间后,使用推动动画打开视图B(视图B可以导航回视图A,这很好)。但我不希望任何时候都显示View A.我怎样才能做到这一点?

编辑:

为了更好地可视化,我正在添加一个屏幕截图,其中包含更多示例案例以支持:

enter image description here

以下是我想支持的一些案例:

  • 我们可以从ViewC开始,点击打开ViewB的'Modally Display B',然后点击'Back to A'导航回ViewA,然后点击ViewA上的'Dismiss Modal'返回ViewC
  • 我们可以从ViewD开始,在打开ViewA的'Modally Display A'上点击,然后点击'PushB'打开ViewB,然后在A和B之间来回切换,并以模态方式关闭ViewD。

4 个答案:

答案 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.
}

你的休息时间也是如此。

No animation for transition from viewC to viewB

答案 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];