2017-02-25 112 views
0

這是我的情況:以模態方式在導航堆棧中呈現視圖控制器

我有兩個視圖控制器嵌入在導航控制器中。我會叫他們發件人和目的地

基本上我想要實現的是用導航堆棧中的目標「替換」發件人,以便按發件人上的按鈕繼續前往目的地但按「 <返回「按鈕導航欄中的發件人和目的地將導致相同的視圖控制器。

問題出在這裏:我希望這兩個視圖控制器之間的轉換是水平翻轉,所以我創建了一個連接發送者和目的地的種類「Present Modally」,轉換爲「Flip Horizo​​ntal」。 在發件人中,我選擇「定義上下文」選項。

現在,對於連接SEGUE:

- 當我選擇「在當前語境下」爲展示它正是我想要的! ...除了動畫看起來有點won。。基本上,發送者保持平坦和靜止,而目的地在其上方翻轉,而不是「一起」翻轉。這是有道理的,因爲segue提供而不是發件人,但它不是我想要的。

- 當我選擇「當前上下文」進行演示時,動畫看起來很棒! ...除了在導航欄中按下「<返回」按鈕,它只是導致帶有導航欄的純黑色視圖,如果我在此視圖上再次按下「<返回」按鈕,我會看到以下異常:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Can't add self as subview' 

任何人都有任何想法,我怎麼能實現我想要做的?這甚至是正確的方法嗎? 我見過一些建議,嘗試將視圖控制器視圖翻轉到新視圖,而不是將整個視圖控制器翻轉到不同的視圖控制器。但是故事板中的一個視圖控制器可以有兩個「全尺寸」視圖嗎?

謝謝!

回答

0

我確定有各種方法可以工作,但我的第一個想法是創建發件人和目的地視圖的容器視圖。

所以,你必須......

  • NavigationController用根視圖控制器( 「RVC」)
  • 容器視圖控制器( 「CVC」)
  • 發件人VC
  • 目的地VC

而不是「RVC」繼續「發送者」你繼續「CVC」...「CVC」最初加載「發件人」到其「容器視圖」...在這一點上,點擊<返回自然返回到「RVC」

當您點擊一個按鈕(或任何您用來啓動下一個轉換)轉到「目的地」時,您可以使用「用發件人替換目的地「容器視圖內 ...在這一點,因爲「CVC」仍然是頂級的堆棧視圖控制器,攻絲<回將再次帶你回到「RVC」

希望是有道理的:)

演示示例可在這裏:https://github.com/DonMag/ContainerViewExample

+0

嗯所以如何更換行動工作?我仍然會使用類似的水平翻轉賽?如果是這樣,我不會像以前一樣遇到同樣的問題,只是在這種情況下,它會在CVC而不是發件人VC? – user3029918

+0

不,你不會使用segue ...看看:https://developer.apple.com/reference/uikit/uiview/1622574-transition – DonMag

+0

如果你仍然在爲此工作,我把在https://github.com/DonMag/ContainerViewExample – DonMag

相關問題