iOS快速自定义UITabBarController内的tabbar控件

思路:1.定义一个BaseTabBarViewController类继承自UITabBarController

   2.将原先的tabbar隐藏,自定义一个控件覆盖在上面

   3.在控件内增加可以点击的按钮,调整控件和按钮的具体细节

具体代码如下:
.h里
#import <UIKit/UIKit.h>
#import "FirstViewController.h"
#import "SecondViewController.h"
#import "ThirdViewController.h"
#import "HZSButton.h"
@interface BaseTabBarViewController : UITabBarController<UITabBarControllerDelegate>
{
    UIImageView *_tabBarView; //自定义的覆盖原先的tarbar的控件
    HZSButton *_previousBtn; //记录前一次选中的按钮
}
@end



.m里
#import "BaseTabBarViewController.h"

@interface BaseTabBarViewController ()

@end

@implementation BaseTabBarViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
   
    //我要投资
    FirstViewController *aFirstViewController=[[FirstViewController alloc]init];
    UINavigationController *nav0=[[UINavigationController alloc]initWithRootViewController:aFirstViewController];
   
   
   
    //我的账户
    SecondViewController *aSecondViewController=[[SecondViewController alloc]init];
    UINavigationController *nav1=[[UINavigationController alloc]initWithRootViewController:aSecondViewController];
   
   
    //更多
    ThirdViewController *aThirdViewController=[[ThirdViewController alloc]init];
    UINavigationController *nav2=[[UINavigationController alloc]initWithRootViewController:aThirdViewController];
   
    self.viewControllers=[NSArray arrayWithObjects:nav0,nav1,nav2,nil];
   
   
    self.delegate=self;
   
   
    self.tabBar.hidden = YES; //隐藏原先的tabBar
    CGFloat tabBarViewY = self.view.frame.size.height - 49;
    _tabBarView = [[UIImageView alloc] initWithFrame:CGRectMake(0, tabBarViewY, self.view.frame.size.width, 49)];
    _tabBarView.userInteractionEnabled = YES; //这一步一定要设置为YES,否则不能和用户交互
//    _tabBarView.image = [UIImage imageNamed:@"[email protected]"];
    _tabBarView.backgroundColor=[UIColor colorWithRed:232.0/255.0 green:235.0/255.0 blue:240.0/255.0 alpha:1];
    [self.view addSubview:_tabBarView];
   
    // 下面的方法是调用自定义的生成按钮的方法
    [self creatButtonWithNormalName:@"[email protected]"andSelectName:@"[email protected]"andTitle:@"消息"andIndex:0];
    [self creatButtonWithNormalName:@"[email protected]"andSelectName:@"[email protected]"andTitle:@"联系人"andIndex:1];
    [self creatButtonWithNormalName:@"[email protected]"andSelectName:@"[email protected]"andTitle:@"我的"andIndex:2];
   
    HZSButton *btn = (HZSButton *)[_tabBarView viewWithTag:8888];
    [self changeViewController:btn]; //自定义的控件中的按钮被点击了调用的方法,默认进入界面就选中第一个按钮
}


//创建一个按钮
- (void)creatButtonWithNormalName:(NSString *)normal andSelectName:(NSString *)selected andTitle:(NSString *)title andIndex:(int)index
{
    /*
    
    HZSButton是自定义的一个继承自UIButton的类,自定义该类的目的是因为系统自带的Button可以设置image和title属性,但是 默认的image是在title的左边,若想想上面图片中那样,将image放在title的上面,就需要自定义Button,设置一些东西。(具体 HZSButton设置了什么,放在下面讲)
     */
   
    CGFloat buttonW = _tabBarView.frame.size.width / 3;
    CGFloat buttonH = _tabBarView.frame.size.height;
   
   
    UIView *aview=[[UIView alloc]init];
    aview.backgroundColor=[UIColor colorWithRed:46.0/255.0 green:167.0/255.0 blue:224.0/255.0 alpha:1];
    aview.frame = CGRectMake(buttonW *index+buttonW/2.0-17.5, 0, 35, buttonH);
    [_tabBarView addSubview:aview];
   
    HZSButton *button = [HZSButton buttonWithType:UIButtonTypeCustom];
    button.tag = index+8888;
    button.frame = CGRectMake(buttonW *index, 0, buttonW, buttonH);
    [button setImage:[UIImage imageNamed:normal] forState:UIControlStateNormal];
    [button setImage:[[UIImage imageNamed:selected] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] forState:UIControlStateDisabled];
    [button setTitle:title forState:UIControlStateNormal];
    [button addTarget:self action:@selector(changeViewController:) forControlEvents:UIControlEventTouchUpInside];
    button.imageView.contentMode = UIViewContentModeCenter; // 让图片在按钮内居中
    button.titleLabel.textAlignment = NSTextAlignmentCenter; // 让标题在按钮内居中
    button.titleLabel.font = [UIFont systemFontOfSize:12]; // 设置标题的字体大小
    [button setTitleColor:[UIColor colorWithRed:153.0/255.0 green:153.0/255.0 blue:153.0/255.0 alpha:1] forState:UIControlStateNormal];
    [button setTitleColor:[UIColor colorWithRed:242.0/255.0 green:132.0/255.0 blue:44.0/255.0 alpha:1] forState:UIControlStateDisabled];
    [_tabBarView addSubview:button];
}


//按钮被点击时调用
- (void)changeViewController:(HZSButton *)sender
{
    self.selectedIndex = sender.tag-8888; //切换不同控制器的界面

    self.tabBarController.selectedViewController=[self.tabBarController.viewControllers objectAtIndex:self.selectedIndex];
    sender.enabled = NO;
    if (_previousBtn != sender) {
   
        _previousBtn.enabled = YES;
       
    }
   
    _previousBtn = sender;
    NSLog(@"self.selectedIndex%ld",self.selectedIndex);
   

}

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。