Iphone 单击tabbar控制器时如何获取导航栏?

Iphone 单击tabbar控制器时如何获取导航栏?,iphone,objective-c,Iphone,Objective C,我有一个应用程序,我试图通过代码动态切换tabbar选项卡。选项卡可以正确切换。当我单击任何选项卡时,会调用该选项卡的didSelectController方法,我的问题是当我单击任何选项卡时,该选项卡上的导航栏消失,其选项卡图像和标题也消失 这是我的密码。在appdelegate中: - (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController

我有一个应用程序,我试图通过代码动态切换tabbar选项卡。选项卡可以正确切换。当我单击任何选项卡时,会调用该选项卡的didSelectController方法,我的问题是当我单击任何选项卡时,该选项卡上的导航栏消失,其选项卡图像和标题也消失

这是我的密码。在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;

}

如果希望选项卡栏控制器中的每个视图控制器都有导航栏,则必须将每个视图控制器“包装”到导航控制器中,然后将导航控制器包装到选项卡栏控制器的ViewController属性中。你这样包装它:

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

代码正在更改视图控制器在选项卡栏中的显示顺序,而不是如您所愿更改选定的视图控制器。这可能会导致同一视图控制器在栏中出现两次,这可能会产生意外的副作用


使用
selectedIndex
selectedViewController
更改选择。您希望选择一个已经存在的控制器,而不是
alloc
/
init
一个新的控制器;正如Johannes所说,控制器列表中的条目应该是
UINavigationController
rootViewController
,它是类的一个实例(
isKindOf:
).

这项工作已经完成,但如何使选项卡项标题和图像也可见。您需要为图像编辑viewController的标题和navigationController的选项卡项。我已经编辑了viewController的标题,但它没有显示选项卡项标题和图像。您能详细解释一下吗?您能提供一些吗示例代码
   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
}