美文网首页很常
iOS开发封装UITabBar

iOS开发封装UITabBar

作者: Flynn_Lee | 来源:发表于2021-03-05 14:09 被阅读0次

    声明:本文中一些对控件长宽高的调用,可以上一篇文章https://www.jianshu.com/p/33db5a336b22
    1、创建一个继承于UITabBar的类,如myTabBar
    2、代码实现如下:

    #import "myTabBar.h"
    @interface myTabBar()
    ///发布按钮
    @property(nonatomic,strong)UIButton *publishButton;
    
    @end
    
    @implementation myTabBar
    
    - (instancetype)initWithFrame:(CGRect)frame
    {
        self = [super initWithFrame:frame];
        if (self) {
            [self createSubView];
        }
        return self;
    }
    
    ///创建中间发布的红色按钮
    -(void)createSubView
    {
        UIButton *publishButton = [[UIButton alloc]init];
        [publishButton setImage:[UIImage imageNamed:@"tabBar_publish_icon"] forState:UIControlStateNormal];
        [publishButton setImage:[UIImage imageNamed:@"tabBar_publish_click_icon"] forState:UIControlStateHighlighted];
        [publishButton addTarget:self action:@selector(publishButtonClick) forControlEvents:UIControlEventTouchUpInside];
        [self addSubview:publishButton];
        self.publishButton = publishButton;
    }
    
    -(void)layoutSubviews
    {
        [super layoutSubviews];
    
        self.publishButton.Size = self.publishButton.currentImage.size;
        self.publishButton.centerX = ScreenWidth / 2;
        self.publishButton.Y = -8;
        
        CGFloat width = ScreenWidth/5;
        CGFloat height = self.publishButton.Height;
        CGFloat buttonY = 0;
        
        NSInteger index = 0;
        ///调整按钮的位置和大小
        for (UIView *button in self.subviews) {
            if ([button isMemberOfClass:NSClassFromString(@"UITabBarButton")]) {
                //调整按钮的x值,空出中间一个按钮的位置给红色发布按钮
                CGFloat buttonX = width * (index < 2 ? index : (index + 1));
    
                button.frame = CGRectMake(buttonX, buttonY, width, height);
                
                index++;
            }
        }
    }
    
    -(void)publishButtonClick
    {
        NSLog(@"%s",__func__);
    }
    

    3、使用方法,在重写UITabBarController的子类的viewDidLoad方法里使用kvc直接替换原来的tabbar

    [self setValue:[[BaiSTabBar alloc]init] forKeyPath:@"tabBar"];
    

    4、效果图如下


    image.png

    相关文章

      网友评论

        本文标题:iOS开发封装UITabBar

        本文链接:https://www.haomeiwen.com/subject/kamrqltx.html