2011-10-18 35 views
0

我有一個應用程序,我試圖通過代碼動態切換tabbar選項卡。當我單擊任何選項卡上的didSelectController方法時選項卡被調用,我的問題是當我點擊任何選項卡上我執行切換視圖的選項卡,它的導航欄消失,它的tabbar圖像和標題也消失。請幫助我解決這個問題。謝謝。這是我的代碼。如何在單擊tabbar控制器時獲得導航欄

中的appdelegate

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController { 
    NSString *clockswitch = [[NSUserDefaults standardUserDefaults]objectForKey:@"clock"]; 
    UIViewController *desiredController = nil; 
    if ([clockswitch isEqualToString:@"digital"]) { 
     desiredController = [[DigitalClockViewController alloc] initWithNibName:@"DigitalClockViewController" bundle:nil ]; 


    } 
    else { 
     desiredController = [[AnalogClockViewController alloc]initWithNibName:@"AnalogClockViewController" bundle:nil]; 


    } 
    NSMutableArray *controllersCopy = [self.tabBarController.viewControllers mutableCopy]; 
    [controllersCopy replaceObjectAtIndex:0 withObject:desiredController]; 
    self.tabBarController.viewControllers = controllersCopy; 

} 

回答

0

如果你希望你的標籤欄控制器中的每個視圖控制器有一個導航欄,你必須「包裹」在導航控制器,然後每個視圖控制器,但導航控制器到標籤欄控制器的viewControllers屬性中。你把它包起來,像這樣:

UINavigationController *controller = [[UINavigationController alloc] initWithRootViewController:desiredController]; 
+0

這得到了工作,但如何使tabbaritem標題和圖像也可見。 – Rani

+0

您需要編輯viewController的標題和圖像的navigationController的tabBarItem。 –

+0

我編輯了我的viewController的標題,但它不顯示tabbaritem標題和圖像 – Rani

1

你的代碼改變着你的視圖控制器出現在標籤欄的順序,不改變選定的視圖控制器,你似乎想。這可能會導致相同的視圖控制器在欄中出現兩次,這可能會產生意想不到的副作用。

使用selectedIndexselectedViewController更改選擇。你想選擇一個已經存在的控制器,而不是alloc/init一個新的;正如Johannes所說,控制器列表中的條目是UINavigationControllerrootViewController是您班級的一個實例(isKindOf:)。

+0

可以請你詳細解釋我。你可以提供一些示例代碼 – Rani

0
if ([clockswitch isEqualToString:@"digital"]) 
{ 
    desiredController = [[DigitalClockViewController alloc] initWithNibName:@"DigitalClockViewController" bundle:nil ]; 
    navigationController=[[UINavigationController alloc] initWithRootViewController:desiredController]; 
    [self presentModelViewController:navigationController animated:YES]; 
    [navigationController release]; 
    [desired... release]; 


} 
else { 
    desiredController = [[AnalogClockViewController alloc]initWithNibName:@"AnalogClockViewController" bundle:nil]; 

...//same code 
} 
相關問題