天天看点

自定义tabBar详解第二种方案

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

原图片:

(1), 

自定义tabBar详解第二种方案

(2), 

自定义tabBar详解第二种方案

(3), 

自定义tabBar详解第二种方案

(4), 

自定义tabBar详解第二种方案

(5)

自定义tabBar详解第二种方案

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

效果图:

自定义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.

}