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