我有一个应用程序,我试图通过代码动态切换tabbar选项卡。标签正确切换。当我单击任何选项卡时,选项卡的didSelectController方法被调用,而我的问题是,当我单击任何选项卡时,我正在执行切换视图的选项卡,其导航栏消失,其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 :(得分:1)
您的代码正在更改视图控制器在标签栏中的显示顺序,而不是按您的意愿更改所选的视图控制器。这可能导致相同的视图控制器在条形图中出现两次,这可能会产生意想不到的副作用。
使用selectedIndex
或selectedViewController
更改选择。您想要选择一个已经存在的控制器,而不是alloc
/ init
一个新控制器;并且,正如Johannes所说,控制器列表中的条目是UINavigationController
,rootViewController
是您班级的实例(isKindOf:
)。
答案 1 :(得分:0)
如果您希望标签栏控制器中的每个视图控制器都有一个导航栏,则必须将每个视图控制器“包装”在导航控制器中,然后将导航控制器“包装”到标签栏控制器的viewControllers属性中。你像这样包装它:
UINavigationController *controller = [[UINavigationController alloc] initWithRootViewController:desiredController];
答案 2 :(得分: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
}