iOS code optimization

时光总嘲笑我的痴心妄想 提交于 2019-12-13 06:43:38

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!