2014-09-30 12 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

相關問題