0

對於不耐煩tabbarcontroller一個navigationcontroller:iPad應用程序的行爲:用更多的標籤

我想有一個navigationcontroller誰的根視圖控制器是一個tabbarcontroller,類似iPad的應用程序。我正在使用IOS 5和故事板。

對於傾斜的讀數:

以我的故事板我有在被在一個UINavigationController內嵌一個的UITabBarController 6個標籤,給它一個「更多」按鈕被示出3個標籤之後。

這樣做讓我兩個導航欄當按下更多:

double nav bar... what does it mean?!

於是我繼承TabBarController:

//@implentation MyTabController 

- (void)viewDidLoad 
{ 
    self.moreNavigationController.wantsFullScreenLayout = NO; 
    self.delegate = self; 
} 

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController 
{ 
    // hide nav bar if current controller is "More" controller 
    self.navigationController.navigationBarHidden = 
     viewController == self.moreNavigationController; 
} 

大,這給了我:

almost there

我的猜測是,我需要重新佈局,以佔據了狀態欄的意見,所以我儘量

[self.view setNeedsLayout:YES]; 

,但我得到一個錯誤說的UIView不包含選擇器,用於setNeedsLayout所以... 如何獲得moreNavigationController.navigationBar來說明狀態欄?

更新
我有第二個相關的問題與此。當我點擊「編輯」按鈕編輯控制器模式顯示。其導航欄顯示下的受保控制器(動畫之後),並且未收到觸摸。

+0

所以TabBarController被推入NavigatorController?如果是這種情況,那麼不建議,應該爲每個tabBar View控制器設置一個NavigatorController,並將TabBarController設置爲主窗口根視圖控制器。如果情況並非如此,我不知道發生了什麼事情:P。 – Raspu 2012-06-14 16:41:24

+0

@Raspu這將解決我的大部分問題,但後退按鈕呢?因爲要這樣做,我會以模態方式呈現標籤欄,即使我向每個導航控制器添加了後退按鈕,也不會有<__ |形狀。 – 2012-06-14 17:57:32

+0

所以你想在顯示tabbar之前能夠回到屏幕?一個解決方案是將所有的導航控制器都放入先前的視圖控制器,然後是你想要顯示的那個(這樣所有的導航欄都有後退按鈕)。另外,你可以設置hidesBottomBarWhenPushed = YES到第一個視圖控制器,這樣它就不會顯示tabBar。 – Raspu 2012-06-14 18:09:27

回答

1

不推薦將tabBarController推入NavController,而是爲每個tabBar視圖控制器設置NavigatorController,並將TabBarController設置爲主窗口根視圖控制器。

如果你希望能夠在顯示標籤欄之前顯示一個屏幕,一個解決方案是將所有的導航控制器推入前一個視圖控制器,然後是你想要顯示的那個(這樣所有的導航欄都有後退按鈕)。 然後將 hidesBottomBarWhenPushed = YES設置爲第一個視圖控制器,這樣它就不會顯示tabBar

示例代碼:

UIViewController *prevc = [[UIViewController alloc] init]; 
//prevc.hidesBottomBarWhenPushed = YES; 

//Do this for every VC that will be a tabBarItem 
UIViewController *vc1 = [[UIViewController alloc] init]; 
UINavigationController *nv1 = [[UINavigationController alloc] initWithRootViewController:prevc]; 
[nv1 pushViewController:vc1 animated:NO]; 

//Remember to set the tabBarItem! 

UITabBarController *tb = [[UITabBarController alloc] init]; 
tb.viewControllers = [NSArray arrayWithObjects:nv1, nv2, nv3, nil]; 

我才意識到,設置hidesBottomBarWhenPushed到以前的ViewController將無法正常工作,但如果你表現出prevc第一,然後按以下的viewController,你不會有問題。但是,如果反正你wan't隱藏標籤欄,而做一個彈出,請檢查:

+0

我不能再接受幾個小時的賞金。只是想知道是否有一種風格,我可以給一個uibarbuttonitem,使它看起來像一個後退按鈕?我沒有推動所有在Storyboard中設置的所有視圖控制器。 – 2012-06-14 22:29:15

+0

據我所知,不可能將它塑造成後退按鈕。但是,如果在設置先前的視圖控制器時遇到問題,也許可以推送一個虛擬視圖控制器,然後使用UINavigatorBar委託(請注意,我在談論條形圖,而不是控制器),以便在用戶按下後退按鈕(navigationBar:shouldPopItem :),並將以前的VC更改爲所需的(我不確定是否可能)作爲參考:http://developer.apple.com/library/ios/#documentation/uikit/reference /UINavigationBarDelegate_Protocol/Reference/Reference.html – Raspu 2012-06-15 02:56:35

+0

而且,實際上,您可以使用背景圖像更改右側的按鈕形狀(之前我已經完成了這個操作,但它在iOS上是3次,所以我不確定是否仍有可能)。 – Raspu 2012-06-15 02:58:15

0

我也面臨着類似的問題。在我的應用程序中,導航控制器中還有一個Tabarcontroller。當我嘗試以編程方式切換到更多導航控制器中的視圖控制器時(如:[self.tabBarController setSelectedIndex:X];)我的應用程序中出現相同的問題。但下面的代碼解決了我的問題。

self.tabBarController.moreNavigationController.navigationBarHidden = YES; 
相關問題