新浪微博客户端(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"];

 

最终效果:

 



如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
posted @   夜行过客  阅读(319)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示