新浪微博开发九(自定义底部菜单栏)


//

//  MyTabBar.h
//  新浪微博
//
//  Created by jose on 15-3-17.
//  Copyright (c) 2015年 jose. All rights reserved.
//


#import <UIKit/UIKit.h>
//代理
@class MyTabBar;
@protocol MyTabBarDelegate<NSObject>
//实现plus响应的方法
-(void)PlusBtnClick:(MyTabBar *)tabBar;
@end


@interface MyTabBar : UITabBar
@property(nonatomic,weak)id<MyTabBarDelegate>delegate;

@end

*************************************************************************************************************************

**************************************************************************************************************************

*************************************************************************************************************************
实现文件:

//
//  MyTabBar.m
//  新浪微博
//
//  Created by jose on 15-3-17.
//  Copyright (c) 2015年 jose. All rights reserved.
//


#import "MyTabBar.h"
#import "UIView+Extension.h"
@interface MyTabBar()
//添加一个plus按钮控件
@property(nonatomic,weak)UIButton *PlusButton;
@end


@implementation MyTabBar


//调用init会先初始化这个方法
-(id)initWithFrame:(CGRect)frame{
    self=[super initWithFrame:frame];
    if (self) {
        [self SetplusBtn];
    }
    return self;
}


//布局子控件
-(void)layoutSubviews{
    [super layoutSubviews];
    //设置plus的frame
    [self SetPlusBtnFrame];
    //设置所有的tab的frame
    [self SetAllTabBtn];
    
}


//设置plus按钮
-(void)SetplusBtn{
    UIButton *Plusbtn=[[UIButton alloc]init];
    [Plusbtn addTarget:self action:@selector(PlusClick) forControlEvents:UIControlEventTouchUpInside];
    [Plusbtn setBackgroundImage:[UIImage imageNamed:@"tabbar_compose_button@2x"] forState:UIControlStateNormal];
    [Plusbtn setBackgroundImage:[UIImage imageNamed:@"tabbar_compose_button_highlighted@2x"] forState:UIControlStateHighlighted];
    [Plusbtn setImage:[UIImage imageNamed:@"tabbar_compose_icon_add_highlighted@2x"] forState:UIControlStateNormal];
    [Plusbtn setImage:[UIImage imageNamed:@"tabbar_compose_background_icon_add@2x"] forState:UIControlStateHighlighted];
    [self addSubview:Plusbtn];
    self.PlusButton=Plusbtn;
    
}


//plus点击事件的代理
-(void)PlusClick{
    if([self.delegate respondsToSelector:@selector(PlusBtnClick:)]) {
        [self.delegate PlusBtnClick:self];
    }
}


//设置plus按钮的frame
-(void)SetPlusBtnFrame{
    //设置plus按钮的frame和中心坐标
    self.PlusButton.size=self.PlusButton.currentBackgroundImage.size;
    self.PlusButton.center=CGPointMake(self.width/2, self.height/2);
}


/**
 *  设置每一个btn的frame
 *
 *  @param tabbarbtn  要设置的按钮
 *  @param index      索引值
 */
-(void)SetTabbarBtnFrame:(UIView *)tabbarbtn Index:(NSInteger)index{
    //计算按钮的尺寸
    CGFloat btnw=self.width/(self.items.count+1);
    CGFloat btnh=self.height;
    tabbarbtn.width=btnw;
    tabbarbtn.height=btnh;
    
    if (index>=2) {
        //计算中间按钮右边的位置
        tabbarbtn.x=btnw*(index+1);
    }
    else{
        //计算中间按钮左边的位置
        tabbarbtn.x=btnw*index;
    }
    tabbarbtn.y=0;
}


/**
 *  设置tabbtn文字的颜色
 *
 *  @param tabbtn 按钮
 *  @param index  索引
 */
/***
-(void)SetBtnColor:(UIView *)tabbtn Index:(NSInteger)index{
    //获取当前选中的index
    NSInteger seletindex=[self.items indexOfObject:self.selectedItem];
    for (UILabel *label in tabbtn.subviews) {
        if (![label isKindOfClass:[UILabel class]])
            continue;
        label.font=[UIFont systemFontOfSize:10];
        if (seletindex==index) {
            //设置文字颜色
            label.textColor=[UIColor orangeColor];
        }
        else{
            label.textColor=[UIColor blackColor];
        }
    }
}
**/


//设置底部所有菜单栏按钮
-(void)SetAllTabBtn{
    NSInteger index=0;
    for (UIView *tabbtn in self.subviews) {
        //使用NSClassFromString来判断是否属于这个类
        if (![tabbtn isKindOfClass:NSClassFromString(@"UITabBarButton")])
              //跳出for循坏语句
              continue;
              [self SetTabbarBtnFrame:tabbtn Index:index];
    
               // [self SetBtnColor:tabbtn Index:index];
              //索引自增
              index++;
        
              } 
}
@end


*************************************************************************************************

****************************************************************************************************

*******************************************************************************************************

使用方法:

 //使用自定义tab

    MyTabBar *tab=[[MyTabBar alloc]init];
    //设置代理(监听控制器的切换, 控制器一旦切换了子控制器,就会调用代理的(tabBarController:didSelectViewController:)的方法
    tab.delegate=self;
    //取代系统的tabBar,kvc修改系统的taBbar
    [self setValue:tab forKeyPath:@"tabBar"];


//实现代理的方法
-(void)PlusBtnClick:(MyTabBar *)tabBar{
    UIViewController *root=[[UIViewController alloc]init];
    root.view.backgroundColor=[UIColor grayColor];
    //[self.navigationController pushViewController:root animated:YES];
    [self presentViewController:root animated:YES completion:nil];
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值