问题
I'm new in iOS development and this may be a very basic question- in my app i've 5 VC with UITabBarController
on each VC. I'm handling tab bar item click by-
- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item
{
switch (item.tag)
{
case 0:
{
vc1 = [[VC1 alloc] initWithNibName:@"VC1" bundle:nil];
[self.view addSubview:vc1.view];
[tabbarObj setSelectedItem:[tabbarObj.items objectAtIndex:0]];
}
break;
case 1:
{
vc2 = [[VC2 alloc] initWithNibName:@"VC2" bundle:nil];
[self.view addSubview:vc2];
}
break;
case 2:
{
vc3 = [[VC3 alloc] initWithNibName:@"VC3" bundle:nil];
[self.view addSubview:vc3];
}
break;
case 3:
{
[tabbarObj setSelectedItem:[tabbarObj.items objectAtIndex:3]];
}
break;
case 4:
{
vc5 = [[VC5 alloc] initWithNibName:@"VC5" bundle:nil];
[self.view addSubview:vc5];
}
break;
default:
break;
}
}
and i know this is not a right way to handle tab bar because every time when i click on a tab bat item it will add a subView on current view. Can anybody suggest me a better way?Thanks.
回答1:
in Your Appedelegate.m
file Make changes in didFinishLaunchingWithOptions
Method
tabBar_Controller = [[UITabBarController alloc] init];
NSMutableArray *localControllersArray =[[NSMutableArray alloc]initWithCapacity:2];
firstViewController = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];
nav = [[UINavigationController alloc] initWithRootViewController:firstViewController];
nav.tabBarItem.title = @"item1";
nav.navigationBar.barStyle = UIBarStyleBlack;
[localControllersArray addObject:nav];
[self setNav:nil];
secondViewController = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
nav = [[UINavigationController alloc] initWithRootViewController:secondViewController];
nav.tabBarItem.title = @"item2";
[localControllersArray addObject:nav];
[self setNav:nil];
tabBar_Controller.viewControllers = localControllersArray;
tabBar_Controller.delegate = self;
tabBar_Controller.selectedIndex = 0;
[self.window addSubview:tabBar_Controller.view];
To Access Some properties after Your ViewController is Selected Use the following Code.
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewControllers
{
NSUInteger index=[[tabBarController viewControllers] indexOfObject:viewControllers];
switch (index) {
case 0:
{
NSLog(@"selected 1");
break;
}
case 1:
{
NSLog(@"selected 2");
break;
}
default:
break;
}
}
For Changing Background image of tabbar Controller you can use Following Code.
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewControllers{
NSUInteger index=[[tabBarController viewControllers] indexOfObject:viewControllers];
switch (index) {
case 0:
[tabBarController.tabBar setBackgroundImage:[UIImage imageNamed:@"tab_act21.png"]];
break;
case 1:
[tabBarController.tabBar setBackgroundImage:[UIImage imageNamed:@"tab_act22.png"]];
break;
case 2:
[tabBarController.tabBar setBackgroundImage:[UIImage imageNamed:@"tab_act23.png"]];
break;
default:
break;
}
return YES;
}
来源:https://stackoverflow.com/questions/13989630/ios-code-optimization