新浪微博客户端(8)-添加按钮到TabBar

在tabBar的中部添加一个发送微博的按钮。

DJTabBar.h

#import <UIKit/UIKit.h>

@class DJTabBar;
@protocol DJTabBarDelegate <UITabBarDelegate>

@optional
- (void)tabBarDidClickPlusBtn:(DJTabBar *)tabBar;

@end


@interface DJTabBar : UITabBar

+ (instancetype)tabBar;
@property (nonatomic,weak) id<DJTabBarDelegate> delegate;


@end

DJTabBar.m

#import "DJTabBar.h"

@interface DJTabBar()

@property (nonatomic,weak) UIButton *plusBtn;

@end


@implementation DJTabBar

@dynamic delegate;

- (UIButton *)plusBtn {

    if (!_plusBtn) {
        
        UIButton *plusBtn = [[UIButton alloc] init];
        [plusBtn setBackgroundImage:[UIImage imageNamed:@"tabbar_compose_button"] forState:UIControlStateNormal];
        [plusBtn setBackgroundImage:[UIImage imageNamed:@"tabbar_compose_button_highlighted"] forState:UIControlStateHighlighted];
        
        [plusBtn setImage:[UIImage imageNamed:@"tabbar_compose_icon_add"] forState:UIControlStateNormal];
        [plusBtn setImage:[UIImage imageNamed:@"tabbar_compose_icon_add_highlighted"] forState:UIControlStateHighlighted];
        
        plusBtn.size = plusBtn.currentBackgroundImage.size;
        
        [self addSubview:plusBtn];
        _plusBtn = plusBtn;

    }
    return _plusBtn;
}




+ (instancetype)tabBar {
    return [[self alloc] init];
}


- (instancetype)initWithFrame:(CGRect)frame {

    if (self = [super initWithFrame:frame]) {
        [self.plusBtn addTarget:self action:@selector(plusBtnClick) forControlEvents:UIControlEventTouchUpInside];
    }
    return self;
}



- (void)layoutSubviews {

    [super layoutSubviews];
    
    // 设置plusBtn的位置
    self.plusBtn.centerX = self.width * 0.5;
    self.plusBtn.centerY = self.height *0.5;
    
    // 设置tabBa上面四个UIBarButton的位置
    
    Class clazz = NSClassFromString(@"UITabBarButton");
    NSUInteger currentChildIndex = 0;
    NSUInteger childWidth = self.width / 5;
    for (UIView *childView in self.subviews) {
        if ([childView isKindOfClass:clazz]) {
            // 如果是第三个tabBar,则自动跳转到第四个
            if (currentChildIndex == 2) {
                currentChildIndex++;
            }
            // 调整位置及大小
            childView.width = childWidth;
            childView.x = childWidth * currentChildIndex;
//            childView.backgroundColor = [UIColor redColor];
            currentChildIndex++;
        }
    }
    
}



- (void)plusBtnClick {
    DJLog(@"click.......");
    if ([self.delegate respondsToSelector:@selector(tabBarDidClickPlusBtn:)]) {
        [self.delegate tabBarDidClickPlusBtn:self];
    }
}


@end

DJMainViewController.m

// 2.添加发送微博按钮
    DJTabBar *tabBar = [DJTabBar tabBar];
    tabBar.delegate = self;
    [self setValue:tabBar forKey:@"tabBar"];

最终效果:

原文地址:https://www.cnblogs.com/yongdaimi/p/5978773.html