自定義tababr,中間有圓角按鈕突起

iOS開發中經常會遇到自定義tabbar,有時候會要求中間的Item往上突起,這裏做了個簡單的封裝,只要在tabbarController中實現即可,先看看效果圖:





以下是實現代碼,只要把代碼拷貝進去,裏面的試圖控制器替換成自己的即可,自己也可以做相應的修改:


視圖控制器繼承自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"]];


}



/**

 重寫突出按鈕的點擊事件,使其與tabbarItem中間那個按鈕的點擊事件一致,點擊的時候,其他按鈕選中爲否,當前tababtrController選中視圖爲中間按鈕的值,self.selectedIndex隨着中間按鈕的位置而變動


 @param sender 點擊的按鈕

 */

-(void)pressChange:(id)sender

{

    self.selectedIndex=2;

    button.selected=NO;

}



/**

 初始化所有子視圖控制器

 這裏的自視圖控制器可以自己任意刪除和添加,在中間需要突出的按鈕那裏不要設置圖片,只需要設置視圖標題,即爲tabbarItem的下方文字

 */

- (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"];

}



/**

 添加中間按鈕,這裏可以有選中按鈕


 @param buttonImage 中間突出按鈕的正常圖片

 @param selectedImage 中間突出按鈕的選中圖片,如果沒有,則爲空

 */

-(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;

    /*

     *  核心代碼:設置buttoncenter tabBar center 做對齊操作, 同時做出相對的上浮

     */

    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





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章