【问题标题】:how to add UITabBarItem programmatically?如何以编程方式添加 UITabBarItem?
【发布时间】:2014-07-03 17:05:32
【问题描述】:

在我的应用程序中,我在“Storyborad”中添加了UITabBarController。 但现在我想以编程方式添加UITabBarItem。假设有 5 个按钮,当用户单击该按钮时,我的 UITabBarController 会被调用。 “标签栏”共有 5 个标签。 例如:

标签名称:item1,item2,item3,item4,item5。 按钮名称:item1,item2,item3,item4,item5。

假设用户点击 item1 按钮,UITabBarcontroller 被调用。现在用户应该无法在“tabbarcontroller”中看到 item1 选项卡,他应该能够看到重置的“tabBartitem”。

谁能帮我解决这个问题? 如何以编程方式进行?

谢谢。

尼莱什·J

【问题讨论】:

    标签: ios objective-c ios7 uitabbarcontroller uitabbaritem


    【解决方案1】:
    UITabBarItem * itemNew = [[UITabBarItem alloc] initWithTitle:@"Page 1"
                                                         image:[UIImage imageNamed:@"page1_image_normal"]
                                                 selectedImage:[UIImage imageNamed:@"page1_image_selected"]];
    

    获取现有的tabBarItems

    NSMutableArray *tbItems = [NSMutableArray arrayWithArray:[self.tabBar items]];
    //Add your new tabBarItem
    [tbItems addObject:itemNew];
    
    //Set your tabBar items to the new array
    [self.tabBar setItems:tbItems];
    

    斯威夫特 4

    if var controllers = tabBarController?.viewControllers {
       let tabItem = UITabBarItem(title: "Item \(controllers.count)", image: nil, selectedImage: nil)
       let vc = UIViewController() // your new view controller
       vc.tabBarItem = tabItem
       controllers.append(vc) // or insert at index up to you
       tabBarController?.setViewControllers(controllers, animated: true)
    }
    

    【讨论】:

    • 尝试此 iOS12 时出现新错误,Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Directly modifying a tab bar managed by a tab bar controller is not allowed.'
    • @AlbertRenshaw 刚刚为 Swift 4 添加了一个代码 sn-p
    【解决方案2】:

    这是用于自定义标签栏控制器。在此代码中,您可以提供 Tabbar 按钮图像,当您单击一个按钮时,该按钮将根据您的图像进行更改。

    UITabBarControllerDelegate设置委托方法

     - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        [self creationTabBar];
        [self.window makeKeyAndVisible];
        return YES;
    }
    
    -(void)creationTabBar
    {
    UINavigationController *myNavigationController;
    
    // Create initialized instance of UITabBarController
    
    UITabBarController *tabBarController = [[UITabBarController alloc] init];
    
    tabBarController.view.frame = CGRectMake(0, 0, self.window.bounds.size.width, self.window.bounds.size.height);
    
    // Create initialized instance of NSMutableArray to hold our UINavigationControllers
    
    NSMutableArray *tabs = [[NSMutableArray alloc] init];
    
    World_ViewController *WorldScreen;
    Home_ViewController *HomeScreen;
    Favourite_ViewController *FavouriteScreen;
    Rank_ViewController *RankScreen;
    Setting_ViewController *SettingScreen;
    
    
    UILabel *item1, *item2, *item3, *item4, *item5;
    
    // Create first UIViewController
    
    WorldScreen = [[World_ViewController alloc] initWithNibName:@"World_ViewController" bundle:nil];
    HomeScreen = [[Home_ViewController alloc] initWithNibName:@"Home_ViewController" bundle:nil];
    FavouriteScreen= [[Favourite_ViewController alloc] initWithNibName:@"Favourite_ViewController" bundle:nil];
    RankScreen = [[Rank_ViewController alloc] initWithNibName:@"Rank_ViewController" bundle:nil];
    SettingScreen = [[Setting_ViewController alloc] initWithNibName:@"Setting_ViewController" bundle:nil];
    
    myNavigationController = [[UINavigationController alloc] initWithRootViewController:self.viewController];
    
    item1 = [[UILabel alloc] initWithFrame:CGRectMake(0, 430, 64, 50)];
    item2 = [[UILabel alloc] initWithFrame:CGRectMake(64, 430, 64, 50)];
    item3 = [[UILabel alloc] initWithFrame:CGRectMake(128, 430, 64, 50)];
    item4 = [[UILabel alloc] initWithFrame:CGRectMake(195, 430, 64, 50)];
    item5 = [[UILabel alloc] initWithFrame:CGRectMake(256, 430, 64, 50)];
    
    
    myNavigationController = [[UINavigationController alloc] initWithRootViewController:HomeScreen];
    [myNavigationController setNavigationBarHidden:YES];
    [tabs addObject:myNavigationController];
    
    myNavigationController = [[UINavigationController alloc] initWithRootViewController:WorldScreen];
    [myNavigationController setNavigationBarHidden:YES];
    [tabs addObject:myNavigationController];
    
    myNavigationController = [[UINavigationController alloc] initWithRootViewController:FavouriteScreen];
    [myNavigationController setNavigationBarHidden:YES];
    [tabs addObject:myNavigationController];
    
    myNavigationController = [[UINavigationController alloc] initWithRootViewController:RankScreen];
    [myNavigationController setNavigationBarHidden:YES];
    [tabs addObject:myNavigationController];
    
    myNavigationController = [[UINavigationController alloc] initWithRootViewController:SettingScreen];
    [myNavigationController setNavigationBarHidden:YES];
    [tabs addObject:myNavigationController];
    
    
    [[UITabBar appearance] setBackgroundImage:[UIImage imageNamed:@"tabbar.png"]];
    [tabBarController setViewControllers:tabs];
    [tabBarController setDelegate:self];
    
    [item1 setText:@"item1"];
    [item1 setBackgroundColor:[UIColor grayColor]];
    [tabBarController.view addSubview:item1];
    item1.tag = 101;
    
    [item2 setText:@"item2"];
    [item2 setBackgroundColor:[UIColor grayColor]];
    [tabBarController.view addSubview:item2];
    item2.tag = 102;
    
    [item3 setText:@"item3"];
    [item3 setBackgroundColor:[UIColor grayColor]];
    [tabBarController.view addSubview:item3];
    item3.tag = 103;
    
    [item4 setText:@"item4"];
    [item4 setBackgroundColor:[UIColor grayColor]];
    [tabBarController.view addSubview:item4];
    item4.tag = 104;
    
    [item5 setText:@"item5"];
    [item5 setBackgroundColor:[UIColor grayColor]];
    [tabBarController.view addSubview:item5];
    item5.tag = 105;
    
    [self.window setRootViewController:self.viewController];
    }
    - (void)tabBarController:(UITabBarController *)tabBarControllerref didSelectViewController:(UIViewController *)viewController
    {
    UILabel *item1 = (UILabel*)[tabBarControllerref.view viewWithTag:101];
    UILabel *item2 = (UILabel*)[tabBarControllerref.view viewWithTag:102];
    UILabel *item3 = (UILabel*)[tabBarControllerref.view viewWithTag:103];
    UILabel *item4 = (UILabel*)[tabBarControllerref.view viewWithTag:104];
    UILabel *item5 = (UILabel*)[tabBarControllerref.view viewWithTag:105];
    
    [item1 setFrame: CGRectMake(0, 430, 64, 50)];
    [item2 setFrame: CGRectMake(64, 430, 64, 50)];
    [item3 setFrame: CGRectMake(128, 430, 64, 50)];
    [item4 setFrame: CGRectMake(195, 430, 64, 50)];
    [item5 setFrame: CGRectMake(256, 430, 64, 50)];
    
    if([tabBarControllerref selectedIndex] == 0)
    {
        [item1 setTextColor:[UIColor redColor]];
        [item2 setTextColor:[UIColor greenColor]];
        [item3 setTextColor:[UIColor greenColor]];
        [item4 setTextColor:[UIColor greenColor]];
        [item5 setTextColor:[UIColor greenColor]];
    }
    else if ([tabBarControllerref selectedIndex] == 1)
    {
        [item1 setTextColor:[UIColor greenColor]];
        [item2 setTextColor:[UIColor redColor]];
        [item3 setTextColor:[UIColor greenColor]];
        [item4 setTextColor:[UIColor greenColor]];
        [item5 setTextColor:[UIColor greenColor]];
    }
    else if ([tabBarControllerref selectedIndex] == 2)
    {
        [item1 setTextColor:[UIColor greenColor]];
        [item2 setTextColor:[UIColor greenColor]];
        [item3 setTextColor:[UIColor redColor]];
        [item4 setTextColor:[UIColor greenColor]];
        [item5 setTextColor:[UIColor greenColor]];
    }
    else if ([tabBarControllerref selectedIndex] == 3)
    {
        [item1 setTextColor:[UIColor greenColor]];
        [item2 setTextColor:[UIColor greenColor]];
        [item3 setTextColor:[UIColor greenColor]];
        [item4 setTextColor:[UIColor redColor]];
        [item5 setTextColor:[UIColor greenColor]];
    }
    else if ([tabBarControllerref selectedIndex] == 4)
    {
        [item1 setTextColor:[UIColor greenColor]];
        [item2 setTextColor:[UIColor greenColor]];
        [item3 setTextColor:[UIColor greenColor]];
        [item4 setTextColor:[UIColor greenColor]];
        [item5 setTextColor:[UIColor redColor]];
    }
    
    }
    

    【讨论】:

      【解决方案3】:

      要调用 tabBar 的点击事件,您需要执行以下操作:

      UITabBarDelegate 上调用delegatemethod 并实现他们的方法:

      - (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item {
          //self.tabBarItem.title = @"Title";
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-05-01
        • 2016-11-23
        • 2012-09-16
        • 2016-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多