之前公司提出一个需求,让点击tabBar上中间的一个按钮然后发送一些内容,效果就像新浪微博中中间的发送按钮。可由于公司有其他的功能需求所以这个需求也一直没有真正地下达。最近看一个网上的视频教程,发现有一个自定义的tabBar正好和公司之前的需求吻合,于是就将代贴出来了。
代码:
首先自定义个tabBar,这个tabBar是继承自UITabBar的。然后将系统的tabBar替换。
- (void)setTabBarButton{
LSTabBar * tabBar = [[LSTabBar alloc] init];
[self setValue:tabBar forKeyPath:@"tabBar"];
}
- (UIButton *)plushBtn{
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;
}
- (void)layoutSubviews{
[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);
}