版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1337926
之前公司提出一个需求,让点击tabBar上中间的一个按钮然后发送一些内容,效果就像新浪微博中中间的发送按钮。可由于公司有其他的功能需求所以这个需求也一直没有真正地下达。最近看一个网上的视频教程,发现有一个自定义的tabBar正好和公司之前的需求吻合,于是就将代贴出来了。
代码:
首先自定义个tabBar,这个tabBar是继承自UITabBar的。然后将系统的tabBar替换。
LSTabBar * tabBar = [LSTabBar alloc init];
self setValue:tabBar forKeyPath:@"tabBar";
}
在自定义的tabBar中调整各个tabBarButton的位置,并添加一个按钮作为tabBar上的发送按钮.
if (_plushBtn == nil) {
UIButton * plustBtn = UIButton buttonWithType:UIButtonTypeCustom;
_plushBtn = plustBtn;
[_plushBtn setBackgroundImage:UIImage imageNamed:@"tabBar_publish_icon" forState:UIControlStateNormal];
[_plushBtn setBackgroundImage:UIImage imageNamed:@"tabBar_publish_click_icon" forState:UIControlStateHighlighted]; // 高亮状态
_plushBtn sizeToFit; // 自适应图片的大小
// 只添加一次
self addSubview:_plushBtn;
}
return _plushBtn;
}
super layoutSubviews;
NSInteger num = self.items.count + 1; // tabBarButton的个数
CGFloat btnW = self.frame.size.width / num;
CGFloat btnH = self.frame.size.height;
// 调整tabBatButton的位置
NSInteger i = 0;
for (UIView * tabBarButton in self.subviews) {
if (tabBarButton isKindOfClass:NSClassFromString(@"UITabBarButton")) {
if (i == 2) { // 如果是第三个按钮则右移一个位置
i += 1;
}
tabBarButton.frame = CGRectMake(btnW*i, 0, btnW, btnH);
i ++;
}
}
self.plushBtn.center = CGPointMake(self.frame.size.width * 0.5, self.frame.size.height * 0.5);
}
我还有一个疑问,为什么要使用自定义tabBar,然后在tabBar中调整tabBarButton的位置呢?
我可以在tabBarController上添加五个(以微博为例)子控制器(正好tabBar上tabBarButton的位置不用调整了),然后在中间的位置上添加一个自己定义的按钮作为发送按钮。这个发送按钮添加的时间很关键,如果是在viewDidLoad中添加就会被系统的tabBatButton所覆盖,无法进行点击,可如果在viewDidAppear方法中添加自定义的发送按钮则可覆盖系统的tabBarButton(中间位置),这样就可以点击中间的发送按钮了。这样同样实现了我们所想要的效果。不知这种方法可取吗?如有人看了我的疑问且有好的回答,愿写下您的回答。谢谢!
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有