天天看点

自定义tababr,中间有圆角按钮突起

iOS开发中经常会遇到自定义tabbar,有时候会要求中间的Item往上突起,这里做了个简单的封装,只要在tabbarController中实现即可,先看看效果图:

自定义tababr,中间有圆角按钮突起

以下是实现代码,只要把代码拷贝进去,里面的试图控制器替换成自己的即可,自己也可以做相应的修改:

视图控制器继承自tabarControllder

.h文件:

//

//  MainViewController.h

//  tabbarDemo

//

//  Created by HandsomeC on 17/6/19.

//  Copyright © 2017年 赵发生. All rights reserved.

//

#import <UIKit/UIKit.h>

@interface MainViewController : UITabBarController

@end

.m文件:

//

//  MainViewController.m

//  tabbarDemo

//

//  Created by HandsomeC on 17/6/19.

//  Copyright © 2017年 赵发生. All rights reserved.

//

#import "MainViewController.h"

#import "HomeViewController.h"

#import "MessageViewController.h"

#import "SendViewController.h"

#import "KindViewController.h"

#import "MineViewController.h"

#define RGBCOL(r,g,b,a) [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:1.0]

@interface MainViewController ()<UITabBarControllerDelegate>

@property (nonatomic,strong)UIButton *button;

@property (nonatomic, strong) HomeViewController *homeVC;

@property (nonatomic, strong) KindViewController *kindVC;

@property (nonatomic, strong) MessageViewController *msgVC;

@property (nonatomic, strong) MineViewController *mineVC;

@end

@implementation MainViewController

@synthesize button;

- (void)viewDidLoad {

    [super viewDidLoad];

    self.view.backgroundColor = [UIColor colorWithRed:238/255.0f green:238/255.0f blue:238/255.0f alpha:1.0];

    [self setTabBarVC];

    //  添加中间突出按钮

    [self addCenterButtonWithImage:[UIImage imageNamed:@"send"] selectedImage:[UIImage imageNamed:@"send"]];

    //设置代理方法

    self.delegate = self;

    [self.tabBar setBackgroundImage:[UIImage imageNamed:@"line"]];

}

-(void)pressChange:(id)sender

{

    self.selectedIndex=2;

    button.selected=NO;

}

- (void)setTabBarVC{

    [self setTabBarChildController:[[HomeViewController alloc] init] title:@"库购" image:@"home" selectImage:@"home1"];

    [self setTabBarChildController:[[KindViewController alloc] init] title:@"分类" image:@"kind" selectImage:@"kind1"];

    [self setTabBarChildController:[[SendViewController alloc] init] title:@"发布" image:@"" selectImage:@""];

    [self setTabBarChildController:[[MessageViewController alloc] init] title:@"消息" image:@"massage" selectImage:@"massage1"];

    [self setTabBarChildController:[[MineViewController alloc] init] title:@"我的" image:@"mine" selectImage:@"mine1"];

}

-(void) addCenterButtonWithImage:(UIImage*)buttonImage selectedImage:(UIImage*)selectedImage

{

    button = [UIButton buttonWithType:UIButtonTypeCustom];

    //重写中间按钮的点击事件

    [button addTarget:self action:@selector(pressChange:) forControlEvents:UIControlEventTouchUpInside];

    button.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleTopMargin;

    //  设定button大小为适应图片

    button.frame = CGRectMake(0.0, 0.0, buttonImage.size.width, buttonImage.size.height);

    [button setImage:buttonImage forState:UIControlStateNormal];

    [button setImage:selectedImage forState:UIControlStateSelected];

    // 去掉选中button时候的阴影

    button.adjustsImageWhenHighlighted=NO;

    CGPoint center = self.tabBar.center;

    //这里是上浮操作,把中间按钮往上移动相应像素

    center.y = center.y - buttonImage.size.height/4-10;

    button.center = center;

    [self.view addSubview:button];

}

// 添加tabbar的子viewcontroller

- (void)setTabBarChildController:(UIViewController*)controller title:(NSString*)title image:(NSString*)imageStr selectImage:(NSString*)selectImageStr{

    UINavigationController* nav = [[UINavigationController alloc] initWithRootViewController:controller];

    nav.tabBarItem.title = title;

    nav.tabBarItem.image = [[UIImage imageNamed:imageStr]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

    nav.tabBarItem.selectedImage = [[UIImage imageNamed:selectImageStr]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

    //设置正常的文字颜色

    [nav.tabBarItem setTitleTextAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:12],NSForegroundColorAttributeName:RGBCOL(74, 74, 74, 1.0)} forState:UIControlStateNormal];

    //设置选中的文字颜色

    [nav.tabBarItem setTitleTextAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:12],NSForegroundColorAttributeName:RGBCOL(159, 215, 5, 1.0)} forState:UIControlStateSelected];

    [self addChildViewController:nav];

}

//重写代理方法

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController

{

    if (self.selectedIndex==1) {

        button.selected=YES;

    }else

    {

        button.selected=NO;

    }

}

@end