天天看點

iOS中關于自定義Tabbar自定義Tabbar Item

自定義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 = ;

}