我有這樣的故事板的應用程式:你如何從一個應用程序的層次結構深處回到開始?
標記爲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引用開始的位置)以及谷歌搜索的結果。
我只做這種類型的編程幾個星期,所以我很抱歉,如果這是一個愚蠢的問題,我只是無法找到一個成功的解決方案,這是一個有點這是我目前的障礙。
感謝您的答覆。不幸的是,這對我不起作用。不知怎的,我猜想它所連接的標籤控制器正在妨礙它。我也嘗試過去除它立即嵌入的導航控制器,但仍然沒有成功。 – SaucyK
對不起,不理我以前的信息。從我的根視圖切換到標籤欄控制器的segue被定義爲模式,將此更改爲push會使您的答案完美無缺。謝謝! – SaucyK