2014-09-30 67 views
0

这里是我的故事板配置:iOS的故事板:如何Segue公司与后退按钮的第一视图第二个观点,但不显示的第一个视图

导航控制器 - > - 视图 - 控制器A - >即按即>视图控制器B
^
|
Modal
^
|
视图控制器C

我想达到的目标:当在视图C中按下按钮时,视图B将以模态方式打开(不显示视图A的一部分)。此外,视图B将具有导航后退按钮查看A.

为了实现这一目标,

  • 我成立了说明故事板。
  • 我在View C和View A/B的导航控制器之间创建了一个segue。
  • 在视图控制器C的'prepareForSegue'方法中,我得到了视图控制器A的一个实例作为导航中的第一个元素。在这个例子中,我设置了一个像'directProceedToViewB = YES'的变量。
  • 在View控制器A的viewDidLoad方法,我检查变量“directlyProceedToViewB”如果是YES,我称之为“performSegueWithIdentifier”来原因请看视图B

其结果是,使得第一视图A以模态方式打开,在显示很短的时间后,视图B以推动动画打开(视图B可导航回视图A,这很好)。但我不想让View A随时显示。我怎样才能做到这一点?

编辑:

为了更好地观察,我加入了屏幕截图更多例子时支持:

enter image description here

这里有一些情况下,我想支持:

  • 我们可以从ViewC开始,点击打开ViewB的'Modally Display B',然后点击'Back to A'返回到ViewA,然后点击'Dis我们可以从ViewD开始,点击'Modally Display A'打开ViewA,然后点击'PushB'打开ViewB,然后在A和B之间来回切换,然后点击'以模式方式驳回给ViewD。
+0

而不是执行从viewA到viewB的segue。在viewC和viewB之间只需要一段时间。你也可以设置为不动画。 – nikhil84 2014-09-30 09:08:10

+0

但是在那种情况下,我不会有从viewB到ViewA的后退导航,对吗? – 2014-09-30 09:12:00

+0

除非您愿意,否则几乎不可能提供帮助包括故事板的图像,显​​示您的目标。 – Fattie 2014-09-30 09:34:44

回答

0

我找到了自己的解决方案。

首先,我才发现,我原来的

建议在检视控制器的viewDidLoad方法,我检查变量 “directlyProceedToViewB”如果是YES,我叫 “performSegueWithIdentifier”来原因请看查看乙

作品如我所需的在iOS 7,但在iOS 8.

因此该解决方案是不行的,在视图续的viewDidLoad方法滚轮A,如果'直接执行到视图B'是YES,而不是调用performSegueWithIdentifier,请使用以下代码:

ViewControllerB *destVC = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewControllerBStoryboardID"]; 
[self.navigationController pushViewController:destVC animated:NO]; 
2

首先,一些更正:那些不是视图,而是视图控制器。并且“视图A”不会被推入UINavigationController,但它是根。

之后,我建议在“视图C”中使用继续展开顺序,然后在“视图A”中执行IBAction,方法是用[[self navigationController] pushViewController:bViewController animated:NO]按“视图B”。

编辑(增加了一些细节):

我认为在ViewControllerAviewWillAppear你在一个非动画方式呈现ViewControllerC
ViewControllerA中执行类似(IBAction)unwindAndThenGoToB:(UIStoryboardSegue *)segue的展开操作。
在故事板中,将ViewControllerC中的按钮连接到退出图标并选择以前定义的方法。
然后用我之前写的push call实现该方法。
ps:对于文档,Apple网站上有很多。

+0

请您详细说明或指出一些参考? – 2014-09-30 09:24:27

+0

试着看看现在是否更好。 – DeFrenZ 2014-09-30 09:32:33

+0

我没有从VC_A提交VC_C。这不是我担心的道路。我想要实现的路径是:VC_C - > VC_B模态地将VC_B到VC_A作为后向导航的可能性。并且从VC_B打开VC_A后,它可能会以正常导航或模态返回VC_C再次转到VC_B。 – 2014-09-30 09:38:36

0

使用delegates.Decalre协议来实现你想要的类,并定义这些方法并调用你想要的视图控制器中的方法。没有很多方法调用某个视图并显示返回按钮以进行不同的视图.modal视图只是一个概念,你可以使用委托方法调用你想要的任何类。

0

在这里,我有一个办法可以这样做: -

您需要设置没有动画从viewC顺着接下去viewA如下图所示的图像。然后设置一个赛格瑞赛格瑞标识,从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

+0

不幸的是,这并没有产生我想要的效果。我试过了,它在导航到ViewB之前仍然显示ViewA很短的时间,但是这次打开ViewA没有动画。我想保留模式转换动画。但它看起来好像直接从ViewC模态地打开ViewB,而不显示ViewA的任何部分。 – 2014-09-30 11:57:55

+0

为此,你需要modallypresentViewB而不是viewA,但在这种情况下,你将不会有viewA堆栈中的后退功能。所以你需要重新考虑你的应用程序流。 – nikhil84 2014-09-30 12:58:53

相关问题