新浪微博客户端(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"];
最终效果:
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库