2012-09-04 48 views
2

我到處尋找這個,所以作爲最後的手段,我想我應該問這個問題。如何關閉Storyboard中的NavigationController?

我在XCode中使用Storyboard,並有一個導航控制器作爲我的初始視圖。此導航控制器的根視圖是一個表視圖。在這個表格視圖中,我在導航欄中有一個按鈕,可以通過模態切換將視圖水平翻轉到導航控制器。這個控制器的根視圖是我的地圖視圖。現在,當我想使用[self dismissViewControllerAnimated:YES completion:nil]解僱這個地圖視圖時,它不起作用。如果我拿出導航控制器就行了。所以,我猜測dismissViewController傳遞給導航控制器,並沒有做任何事情。我知道我可以爲導航控制器實現一個類來處理呼叫並將其傳遞,但​​除非絕對必要,否則我不想這樣做。

所以解決這個問題:

  1. 我需要一種方法來表視圖之間切換使用翻轉水平動畫,反之亦然地圖視圖。

  2. 我需要在兩個視圖中都有一個導航控制器,我可以是同一個或不同的視圖。我似乎無法找到一種方法來使用相同的方法,因爲任何轉換都會導致不能進行水平轉換的轉換。

在此先感謝您的幫助!

+0

您的意思是'dismissModalViewController'而不是'dismissViewController'嗎? – jonkroll

+0

我使我的應用程序iOS 6兼容,dismissModalViewController已棄用。 – WiseOlMan

+0

嗨,當您將segue模型化爲導航控制器時,您是如何在新的導航控制器的新視圖控制器中查看視圖控制器中的原始控制器的參考?因爲當我做prepareforsegue和segue.destinationViewController它返回導航控制器,而不是視圖控制器 – coolcool1994

回答

3

當您撥打[self dismissViewControllerAnimated:YES completion:nil]時,誰是self

此消息的接收者需要是視圖控制器,它提供了您想要消除的模式視圖控制器。如果您在所提供的視圖控制器上調用它,或者(在容器視圖控制器(如UINavigationController,它所管理的視圖控制器之一)的情況下),UIKit將嘗試做正確的事情,但不會總是成功。

假設你所指的self是包含地圖視圖的視圖控制器,你可以獲得presentingViewController屬性來獲取你應該調用dismissViewControllerAnimated:completion:的對象。 (如果您需要獲取位於兩者之間的導航控制器,請使用navigationController屬性。)

+0

謝謝你指出這些屬性,但不幸的是它仍然無法正常工作。這是我試過的。從地圖視圖上的按鈕,我將代碼更改爲'[[[self navigationController] presentingViewController] dismissViewControllerAnimated:YES completion:nil]',那沒用。我也試過'[[self navigationController] dismissViewControllerAnimated:YES completion:nil]'這也行不通。有什麼建議麼? – WiseOlMan

+0

對不起,我的功能顯然沒有被按下按鈕時調用,即使它在早期工作-_-要清除,所有三個選項都工作'[[self presentingViewController] dismissViewControllerAnimated:YES completion:nil] '或'[[self navigationController] dismissViewControllerAnimated:YES completion:nil]'或者最簡單的一個'[self dismissViewControllerAnimated:YES completion:nil]'仍然通過導航控制器來適當地關閉模態視圖。感謝您的幫助,我學到了更多的技巧:D – WiseOlMan

相關問題