zoukankan      html  css  js  c++  java
  • 新浪微博客户端(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"];

    最终效果:

  • 相关阅读:
    硬件设计:蓝牙--蓝牙射频测试
    硬件设计:逻辑电平--差分信号(PECL、LVDS、CML)电平匹配
    硬件设计:元器件--二极管
    硬件设计:逻辑电平--CML
    硬件设计:POE--POE受电设备(PD)电路工作原理
    硬件设计:逻辑电平--LVDS
    硬件设计--阻抗匹配
    硬件设计:电路防护--TVS管
    硬件设计:POE--POE基础
    硬件设计:元器件--二极管常用的七种用法
  • 原文地址:https://www.cnblogs.com/yongdaimi/p/5978773.html
Copyright © 2011-2022 走看看