自定義Tabbar Item
方法一:完全自定義tabbar,将系統tabbar删除,并将自定義的view加載到tabbar的位置
優點:可以完全自定義,實作自己想要的特殊效果
缺點:push過,隐藏和展示tabbar比較麻煩
1.直接代碼:
- (void)viewDidLoad {
[super viewDidLoad];
[self.tabBar removeFromSuperview];
//data
_arrImgName = @[@{kCUSIMG:@"icon_tab_1_normal",kSELIMG:@"icon_tab_1_selected",kTITLE:@"首頁"},@{kCUSIMG:@"icon_tab_2_normal",kSELIMG:@"icon_tab_2_selected",kTITLE:@"業務"},@{kCUSIMG:@"icon_tab_3_normal",kSELIMG:@"icon_tab_3_selected",kTITLE:@"我的"},@{kCUSIMG:@"icon_tab_4_normal",kSELIMG:@"icon_tab_4_selected",kTITLE:@"更多"}];
[self customTabBar];
[self creatViewControllers];
self.cusTool.backgroundColor = [UIColor whiteColor];
[self.view addSubview:self.cusTool];
}
2.自定義的核心代碼
-(void)customTabBar
{
float kMargin = (kWidth-kTabImgW*)/;
float kLeftMargin = *kMargin;
_cusTool = [[UIView alloc]initWithFrame:CGRectMake(, kHeight-, kWidth, )];
for (int i = ; i<; i++) {
CustomButton *btn = [[CustomButton alloc]initWithFrame:CGRectMake(kMargin*i+kLeftMargin+((kWidth-*kMargin-*kLeftMargin)/)*i, , kTabImgW, )];
btn.imageEdgeInsets = UIEdgeInsetsMake(, , , );
[btn setImage:[UIImage imageNamed:[_arrImgName[i] objectForKey:kCUSIMG]] forState:UIControlStateNormal];
[btn setImage:[UIImage imageNamed:[_arrImgName[i] objectForKey:kSELIMG]] forState:UIControlStateSelected];
[btn setTitle:[_arrImgName[i] objectForKey:kTITLE] forState:UIControlStateNormal];
[btn setTitleColor:[UIColor grayColor] forState:UIControlStateNormal];
[btn setTitleColor:[UIColor orangeColor] forState:UIControlStateSelected];
btn.rateFloatTitle = kTabImgH/;
btn.titleLabel.font = [UIFont systemFontOfSize:f];
btn.tag = i+;
[btn addTarget:self action:@selector(clickToChangeVC:) forControlEvents:UIControlEventTouchUpInside];
[self.cusTool addSubview:btn];
if (i==) {
self.seleBtn = btn;
self.seleBtn.selected = YES;
}
}
}
-(void)clickToChangeVC:(UIButton *)sender
{
self.seleBtn.selected = NO;
sender.selected = YES;
self.seleBtn = sender;
self.selectedIndex = sender.tag-;
}
3.建立試圖
-(void)creatViewControllers
{
HomeController *homeVC = [[HomeController alloc]init];
homeVC.title = @"首頁";
FinanceController *financeVC = [[FinanceController alloc]init];
financeVC.title = @"業務";
MeController *userVC = [[MeController alloc]init];
userVC.title = @"我的";
MoreController *moreVC = [[MoreController alloc]init];
moreVC.title = @"更多";
NSArray *VCs = @[homeVC,financeVC,userVC,moreVC];
NSMutableArray *navVCs = [NSMutableArray arrayWithCapacity:];
for (UIViewController *controller in VCs) {
UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:controller];
[navVCs addObject:nav];
}
self.viewControllers = navVCs;
self.tabBar.translucent = NO;
self.selectedIndex = ;
}
方法二:直接用系統的tabbar設定一下
優點:展示和隐藏很友善
缺點:特别特殊的樣式不适用
1.核心代碼:
-(UITabBarItem *)creatCustomItemWithImgName:(NSString *)imgName selImg:(NSString *)selImgName title:(NSString *)title
{
UITabBarItem *item = [[UITabBarItem alloc]initWithTitle:title image:[UIImage imageNamed:imgName] selectedImage:[[UIImage imageNamed:selImgName] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
[item setTitleTextAttributes:@{NSForegroundColorAttributeName:TabbarTitleColor}//TabbarTitleColor是自定義顔色
forState:UIControlStateNormal];
[item setTitleTextAttributes:@{NSForegroundColorAttributeName:TabbarTitleSelColor} forState:UIControlStateSelected];
return item;
}
2.建立試圖時,建立item
-(void)creatViewControllers
{
HomeController *homeVC = [[HomeController alloc]init];
homeVC.title = @"首頁";
homeVC.tabBarItem = [self creatCustomItemWithImgName:[_arrImgName[] objectForKey:kCUSIMG] selImg:[_arrImgName[] objectForKey:kSELIMG] title:"首頁"];
homeVC.navigationController.navigationBar.translucent= NO;
FinanceController *financeVC = [[FinanceController alloc]init];
financeVC.title = @"業務";
financeVC.tabBarItem = [self creatCustomItemWithImgName:[_arrImgName[] objectForKey:kCUSIMG] selImg:[_arrImgName[] objectForKey:kSELIMG] title:@"業務"];
financeVC.navigationController.navigationBar.translucent= NO;
MeController *userVC = [[MeController alloc]init];
userVC.title = @"我的";
userVC.tabBarItem = [self creatCustomItemWithImgName:[_arrImgName[] objectForKey:kCUSIMG] selImg:[_arrImgName[] objectForKey:kSELIMG] title:@"我的"];
userVC.navigationController.navigationBar.translucent= NO;
MoreController *moreVC = [[MoreController alloc]init];
moreVC.title = @"更多";
moreVC.tabBarItem = [self creatCustomItemWithImgName:[_arrImgName[] objectForKey:kCUSIMG] selImg:[_arrImgName[] objectForKey:kSELIMG] title:@"更多"];
moreVC.navigationController.navigationBar.translucent= NO;
NSArray *VCs = @[homeVC,financeVC,userVC,moreVC];
NSMutableArray *navVCs = [NSMutableArray arrayWithCapacity:];
for (UIViewController *controller in VCs) {
UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:controller];
[navVCs addObject:nav];
}
self.viewControllers = navVCs;
self.tabBar.translucent = NO;
self.selectedIndex = ;
}