iOS中关于自定义Tabbar

来源:互联网 发布:simpleadapter源码 编辑:程序博客网 时间:2024/06/05 21:50

自定义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*4)/5;    float kLeftMargin = 0.5*kMargin;    _cusTool = [[UIView alloc]initWithFrame:CGRectMake(0, kHeight-49, kWidth, 49)];    for (int i = 0; i<4; i++) {        CustomButton *btn = [[CustomButton alloc]initWithFrame:CGRectMake(kMargin*i+kLeftMargin+((kWidth-3*kMargin-2*kLeftMargin)/4.0)*i, 2, kTabImgW, 47)];        btn.imageEdgeInsets = UIEdgeInsetsMake(1, 12, 1, 12);        [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/47.0;        btn.titleLabel.font = [UIFont systemFontOfSize:12.0f];        btn.tag = i+1000;        [btn addTarget:self action:@selector(clickToChangeVC:) forControlEvents:UIControlEventTouchUpInside];        [self.cusTool addSubview:btn];        if (i==0) {            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-1000;}

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:4];    for (UIViewController *controller in VCs) {        UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:controller];        [navVCs addObject:nav];    }    self.viewControllers = navVCs;    self.tabBar.translucent = NO;    self.selectedIndex = 0;}

方法二:直接用系统的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[0] objectForKey:kCUSIMG] selImg:[_arrImgName[0] objectForKey:kSELIMG] title:"首页"];    homeVC.navigationController.navigationBar.translucent= NO;    FinanceController *financeVC = [[FinanceController alloc]init];    financeVC.title = @"业务";    financeVC.tabBarItem = [self creatCustomItemWithImgName:[_arrImgName[1] objectForKey:kCUSIMG] selImg:[_arrImgName[1] objectForKey:kSELIMG] title:@"业务"];    financeVC.navigationController.navigationBar.translucent= NO;    MeController *userVC = [[MeController alloc]init];    userVC.title = @"我的";    userVC.tabBarItem = [self creatCustomItemWithImgName:[_arrImgName[2] objectForKey:kCUSIMG] selImg:[_arrImgName[2] objectForKey:kSELIMG] title:@"我的"];    userVC.navigationController.navigationBar.translucent= NO;    MoreController *moreVC = [[MoreController alloc]init];    moreVC.title = @"更多";    moreVC.tabBarItem = [self creatCustomItemWithImgName:[_arrImgName[3] objectForKey:kCUSIMG] selImg:[_arrImgName[3] objectForKey:kSELIMG] title:@"更多"];    moreVC.navigationController.navigationBar.translucent= NO;    NSArray *VCs = @[homeVC,financeVC,userVC,moreVC];    NSMutableArray *navVCs = [NSMutableArray arrayWithCapacity:4];    for (UIViewController *controller in VCs) {        UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:controller];        [navVCs addObject:nav];    }    self.viewControllers = navVCs;    self.tabBar.translucent = NO;    self.selectedIndex = 0;}
1 0