how to add UITabBarItem programmatically?

2020-04-07 06:12发布

问题:

In my application, i have added UITabBarController in "Storyborad". But now i want to add UITabBarItem programmatically. Let's say there are 5 buttons and when ever user click on that button my UITabBarController is called. There are total 5 tab in "tabbar". e.g:

Tab name:item1,item2,item3,item4,item5. Button name:item1,item2,item3,item4,item5.

Let's say user click on item1 button, UITabBarcontroller is called. Now user should not be able to see that item1 tab in "tabbarcontroller", he should be able to see the reset "tabBaritem".

Can anyone help me out with this? How to do it programmatically?

Thanks.

Nilesh J

回答1:

To call tabBar click event you need to do the following:

call delegatemethod on UITabBarDelegate and implement their method:

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


回答2:

UITabBarItem * itemNew = [[UITabBarItem alloc] initWithTitle:@"Page 1"
                                                     image:[UIImage imageNamed:@"page1_image_normal"]
                                             selectedImage:[UIImage imageNamed:@"page1_image_selected"]];

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

Swift 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)
}


回答3:

This is for Custom Tabbar Controller. In this code you can give your Tabbar Button Image and when you click one Button that buttom will be changed according to your image.

Set Delegate Method for 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]];
}

}