首页 > 代码库 > 自定义tabBar详解第二种方案

自定义tabBar详解第二种方案

自定义tabBar能够解决自定义图片无法显示(只显示一块颜色)这个弊端,自定义tabBar要继承UITabBarController

原图片:

(1),  (2), (3),  (4), (5)

下面是自定义了一个TabBar ,每个按钮可以显示图片(自定义避免了图片无法显示只显示一块颜色)

效果图:



代码实现:

一, 首先创建一个继承UIButton的类CustomTabBar,

在.h文件中:

//指定协议是为了实现点击button显示相应地页面,像系统的tabBar一样

@protocol CustomTabBarDelegate <NSObject>

-(void)didSelectBarItemAtIndex:(NSInteger)index;

@end

@interface CustomTabBar : UIButton
@property(nonatomic,assign) NSInteger index;
@property (nonatomic,retain) id<CustomTabBarDelegate> delegate;
- (id)initWithFrame:(CGRect)frame WithImage:(UIImage *)image AndSelectedImage:(UIImage *)image;
@end



在.m文件中


#import "CustomTabBar.h"

@interface CustomTabBar ()

@end
@implementation CustomTabBar

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code

    }
    return self;
}

- (id)initWithFrame:(CGRect)frame WithImage:(UIImage *)image AndSelectedImage:(UIImage *)selectedImage{
    self = [super initWithFrame:frame];
    if (self) {
        self.frame = frame;
        [self setAdjustsImageWhenHighlighted:NO];
        [self setImage:image forState:UIControlStateNormal];
        [self setImage:selectedImage forState:UIControlStateSelected];
        [self addTarget:self action:@selector(click:) forControlEvents:UIControlEventTouchUpInside];
    }
    return self;
}

-(void)click:(UIButton *)btn{
    if ([self.delegate respondsToSelector:@selector(didSelectBarItemAtIndex:)]) {
        [self.delegate didSelectBarItemAtIndex:self.index];
    }
    switch ((int)(btn.selected)) {
        case 0:
            btn.selected = YES;
            break;
        case 1:
            btn.selected = NO;
            break;
        default:
            break;
    }
}


@end


二, 创建一个类CustomizedTabBarController继承UITabBarController


在.m文件中

- (void)loadViewController
{
    CoverCollectionViewController *coverVC = [[CoverCollectionViewController alloc] init];
    //coverVC.title = @"每日封面";
    CustomizedNavigationController *coverNaVC = [[CustomizedNavigationController alloc] initWithRootViewController:coverVC];
    coverNaVC.navigationItem.title = @"iDailyWATCh";
    
    NewsTableViewController *newsVC = [[NewsTableViewController alloc] init];
    //newsVC.title = @"腕表杂志";
    CustomizedNavigationController *newsNaVC = [[CustomizedNavigationController alloc] initWithRootViewController:newsVC];
    
    BrandsTableViewController *brandsVC = [[BrandsTableViewController alloc] init];
    //brandsVC.title = @"品牌维基";
    CustomizedNavigationController *brandsNaVC = [[CustomizedNavigationController alloc] initWithRootViewController:brandsVC];
    
    VideosCollectionViewController *videosVC = [[VideosCollectionViewController alloc] init];
    //videosVC.title = @"视频";
    CustomizedNavigationController *videosNaVC = [[CustomizedNavigationController alloc] initWithRootViewController:videosVC];
    
    MoreViewController *moreVC = [[MoreViewController alloc] init];
    //moreVC.title = @"更多";
    CustomizedNavigationController *moreNaVC = [[CustomizedNavigationController alloc] initWithRootViewController:moreVC];
    
    self.viewControllers = @[coverNaVC, newsNaVC, brandsNaVC, videosNaVC, moreNaVC];
    self.selectedIndex = 0;
    RELEASE_SAFE(coverNaVC);
    RELEASE_SAFE(coverVC);
    RELEASE_SAFE(brandsNaVC);
    RELEASE_SAFE(brandsVC);
    RELEASE_SAFE(videosNaVC);
    RELEASE_SAFE(videosVC);
    RELEASE_SAFE(moreNaVC);
    RELEASE_SAFE(moreVC);
}



- (void)setupTabBar
{
    for (int i = 0 ; i < 5; i++) {
        if (i < 3) {
            CustomTabBar *bar = [[CustomTabBar alloc]initWithFrame:CGRectMake(0 + 80 * i, 0, 80, 49) WithImage: [UIImage imageNamed:[NSString stringWithFormat:@"%d", i + 100]]AndSelectedImage:[UIImage imageNamed:[NSString stringWithFormat:@"%d", i + 130]]];
            bar.index = i;
            bar.delegate = self;
            bar.backgroundColor = RGB(245, 245, 245);
            [self.tabBar addSubview:bar];
            [bar release];
            if (i == 0) {
                bar.selected = YES;
            }
        } else {
            CustomTabBar *bar = [[CustomTabBar alloc]initWithFrame:CGRectMake(0 + 40 * (i + 3), 0, 40, 49) WithImage: [UIImage imageNamed:[NSString stringWithFormat:@"%d", i + 100]]AndSelectedImage:[UIImage imageNamed:[NSString stringWithFormat:@"%d", i + 130]]];
            bar.index = i;
            bar.delegate = self;
            bar.backgroundColor = RGB(245, 245, 245);
            [self.tabBar addSubview:bar];
            [bar release];
        }
    }
}


-(void)didSelectBarItemAtIndex:(NSInteger)index{
    [self resignBatState];
    self.selectedViewController = self.viewControllers[index];
}
-(void)resignBatState{
    NSArray *arr = [self.tabBar subviews];
    for (CustomTabBar *bar in arr) {
        if ([bar isKindOfClass:[CustomTabBar class]]) {
            bar.selected = NO;
        }
    }
}

- (void)changeViewController:(UIButton *)button
{
    self.selectedIndex = button.tag;
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}









自定义tabBar详解第二种方案