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

时间:2023-03-10 01:29:48
新浪微博客户端(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 = ;
NSUInteger childWidth = self.width / ;
for (UIView *childView in self.subviews) {
if ([childView isKindOfClass:clazz]) {
// 如果是第三个tabBar,则自动跳转到第四个
if (currentChildIndex == ) {
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"];

最终效果:

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