2013-04-10 91 views
1

這裏後我的標籤欄控制器消失是我的應用程序的設置:推賽格瑞

導航 -

-loginVC - 如果登錄有效,推動Segue公司TO-

tab bar controller with 3 tabs: 
     -in the first tab, is a profile display which modal pushes to a profile editor(not 
     issue here) 
     -second tab is a searchVC that pushes to a tableVC that shows results. This is 
     where the tab bar disappears 
     -The third view is just a VC for updating the database this is linked to. 

這實際上它是如何在故事板上工作的,而且我確定從searchVC到tableVC的延續,是一個推動階段。

如何讓標籤欄控制器不會在第二個視圖中消失。

回答

0

除非您有另一個您沒有提到的導航控制器,否則您的推送來自您的初始控制器的導航控制器。因此,從中推送,將tableVC放在導航控制器的視圖控制器中的標籤欄控制器上。

我建議你讓標籤欄控制器窗口的根視圖控制器。在第一個選項卡(從其viewDidAppear方法)中獲取由控制器以模態方式呈現的loginVC,以便它在應用啓動時首先顯示。第二個選項卡應該有一個導航控制器作爲其根控制器,並使用searchVC作爲導航控制器的根視圖控制器。

2

結構應

loginViewController -->modal segue--> tabBarController 
             | 
             | 
             |-->NavController->Item1ViewController 
             | 
             |-->NavController->Item2ViewController 
             | 
             |-->NavController->Item3ViewController 

目前,在你的第二個選項卡項目的「推」推動整個標籤欄控制器出當你從第2項第一款的viewController推的方式。

如果你想在loginViewController(一致性)一個導航欄,將它嵌入到它自己的navigationController,但確保您不會從那裏推:modal賽格瑞或表現爲[self presentViewController:tabBarViewController animated:yes completion:nil]

每個標籤欄項目的導航控制器是可選的(取決於你之後的導航,顯然你確實需要一個項目2) - 但你可能需要爲每個項目的一致性。

更新
@rdelmar表明,使用登錄屏幕作爲根視圖控制器的這種方法 - 在其頂部的應用程式的其餘部分是「模態」呈現 - 是模態SEGUE的誤用,以及建議改爲在第一個選項卡上模式地顯示登錄屏幕。我明白點,並給它一些更多的思考,但我同樣發現替代有點不舒服...標籤項目應在tabVC共享相同的權重 - 這樣做的第一個項目提出一個模式登錄控制器上的整個應用程序依賴不覺得好的程序流程。如果一個應用程序需要用戶登錄,我不會看到任何錯誤的登錄以支撐它。

我在這裏回答:(How to handle UINavigationControllers and UITabBarControllers iOS 6.1)對此有更全面的描述版本。這也有個好處,如果你從任何地方在你的應用程序提供了一個退出按鈕,開卷SEGUE回到那個第一次登錄屏幕 - 有效聯合國呈遞整個登錄應用程序堆棧 - 將很好地工作。

一個不同的解決方案 - 用@ rdelmar's編鐘 - 將從第一個viewController 模態地呈現登錄屏幕(如果它不在標籤欄控制器中)。這可能在我前面提到的答案中起作用,因爲登錄後的第一個屏幕是一個navController嵌入式viewController。然而,退出註銷不會那麼幹淨。

最後我懷疑這可能只是一個風格,我們不應該太過於掛斷,只要流程邏輯保持健全。

+0

這就是我現在想到的一點。我所做的就是隱藏原始的激動酒吧,併爲每三個酒吧創建導航欄。因爲我在每個視圖之間傳遞數據,所以我創建了自己的導航控制器來獲取數據並將其傳遞到相應的視圖中。 – Jargen89 2013-04-10 03:27:18

+0

我認爲這會誤用模態視圖控制器 - 不是它不起作用,而是將您的主界面作爲模態控制器呈現違反了模態控制器的預期用途。從Apple的文檔中可以看出:「呈現視圖控制器的能力是您可以隨意使用的一種工具,用於中斷當前工作流程並顯示一組新視圖。通常,應用會將視圖控制器視爲臨時中斷以獲取重要信息但是,您也可以使用提供的視圖控制器在特定時間爲您的應用實現備用接口。「 – rdelmar 2013-04-10 03:27:53

+0

標籤欄控制器是主界面,不是備用界面或臨時中斷。從操作的角度來看,沒有任何問題(除了登錄控制器在整個應用中保持活躍狀態​​)。 – rdelmar 2013-04-10 03:29:43