自定义UITabBar--实现类似新浪微博中间的发送按钮

之前公司提出一个需求,让点击tabBar上中间的一个按钮然后发送一些内容,效果就像新浪微博中中间的发送按钮。可由于公司有其他的功能需求所以这个需求也一直没有真正地下达。最近看一个网上的视频教程,发现有一个自定义的tabBar正好和公司之前的需求吻合,于是就将代贴出来了。大笑

代码:

首先自定义个tabBar,这个tabBar是继承自UITabBar的。然后将系统的tabBar替换

- (void)setTabBarButton{

    

    LSTabBar * tabBar = [[LSTabBar alloc] init];

    

    [self setValue:tabBar forKeyPath:@"tabBar"];

}


在自定义的tabBar中 调整各个tabBarButton的位置,并添加一个按钮作为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);

    

}


我还有一个 疑问,为什么要使用自定义tabBar,然后在tabBar中调整tabBarButton的位置呢?
我可以在tabBarController上添加五个(以微博为例)子控制器(正好tabBar上tabBarButton的位置不用调整了),然后在中间的位置上添加一个自己定义的按钮作为发送按钮。这个发送按钮添加的时间很关键,如果是在viewDidLoad中添加就会被系统的tabBatButton所覆盖,无法进行点击,可如果在 viewDidAppear方法中添加自定义的发送按钮则可覆盖系统的tabBarButton(中间位置),这样就可以点击中间的发送按钮了。这样同样实现了我们所想要的效果。不知这种方法可取吗? 如有人看了我的疑问且有好的回答,愿写下您的回答。谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值