0

我是 iOS 开发的新手,这可能是一个非常基本的问题——在我的应用程序中UITabBarController ,每个 VC 都有 5 个 VC。我正在处理标签栏项目点击-

- (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;
    }
}

而且我知道这不是处理选项卡栏的正确方法,因为每次当我单击选项卡 bat 项目时,它都会在当前视图上添加一个子视图。有人可以建议我更好的方法吗?谢谢。

4

1 回答 1

3

在您的Appedelegate.m文件中更改 didFinishLaunchingWithOptions方法

 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];

选择 ViewController 后访问某些属性使用以下代码。

- (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;
    }


}

对于更改标签栏控制器的背景图像,您可以使用以下代码。

- (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;
}
于 2012-12-21T11:57:20.927 回答