2012-10-19 53 views
0

我有這樣的故事板的應用程式:enter image description here你如何從一個應用程序的層次結構深處回到開始?

標記爲1的場景是我的應用程序初始視圖中,當它們裝入應用程序中的用戶看到的第一個場景。這實際上是我的登錄/註冊場景。

標記爲2的場景在應用程序內部很深,它嵌入在UINavigationController中,該UINavigationController本身通過UITabBarController進行訪問。這個場景有一個註銷按鈕,用於清除會話,並且還將用戶返回到場景#1。

返回第一個場景的正確方法是什麼?我嘗試了幾種不成功的方法。以下是我試過的:

[[self navigationController] popToRootViewControllerAnimated:YES];

#2加載時不會做任何事(我相信),它實際上是當前navigationController的根視圖控制器。

通過賽格瑞

推並未真正發揮作用,因爲它只是增加了場景#1到堆棧,使用戶能夠在「返回」的設置。我相信我可以爲此隱藏導航欄,但從我可以收集的內容來看,我不應該這樣做,因爲此方法只是將視圖添加到堆棧,並且如果用戶要重複此操作,應用程序最終會耗盡內存並崩潰。

AppDelegate * delegate =(AppDelegate *)[[UIApplication sharedApplication] delegate]; [[delegate.window rootViewController] dismissModalViewControllerAnimated:YES];

這確實出現了清除一切,並返回到初始視圖,但與場景的互動(比如點擊登錄或註冊按鈕)導致錯誤,像這樣的:

* *因未捕獲異常'NSInvalidArgumentException'而終止應用程序,理由:'應用程序試圖在目標上呈現一個零模式視圖控制器。'

我非常感謝您爲解決此問題提供的任何幫助。我已經在這裏待了幾天,閱讀了儘可能多的SO問題,嘗試閱讀Apple文檔(儘管不知道從UINavigationBarController引用開始的位置)以及谷歌搜索的結果。

我只做這種類型的編程幾個星期,所以我很抱歉,如果這是一個愚蠢的問題,我只是無法找到一個成功的解決方案,這是一個有點這是我目前的障礙。

回答

1

這工作:

- (IBAction)pop:(id)sender { 

    [self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:0] animated:YES]; 
} 
+0

感謝您的答覆。不幸的是,這對我不起作用。不知怎的,我猜想它所連接的標籤控制器正在妨礙它。我也嘗試過去除它立即嵌入的導航控制器,但仍然沒有成功。 – SaucyK

+0

對不起,不理我以前的信息。從我的根視圖切換到標籤欄控制器的segue被定義爲模式,將此更改爲push會使您的答案完美無缺。謝謝! – SaucyK

相關問題