自定义tabBar的使用

原创 2016年08月30日 17:50:32

首先,新建一个自定义的tabbar 继承UITabBar

#import "ZGTabBar.h"

@interface ZGTabBar()
@property (nonatomic, weak) UIButton *plusBtn;
@end

@implementation ZGTabBar

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // 添加一个按钮到tabbar中
        UIButton *plusBtn = [[UIButton alloc] init];
        //.....一系列对button的设置
        plusBtn.size = plusBtn.currentBackgroundImage.size;
        [plusBtn addTarget:self action:@selector(plusClick) forControlEvents:UIControlEventTouchUpInside];
        [self addSubview:plusBtn];
        self.plusBtn = plusBtn;
    }
    return self;
}

/**
 *  加号按钮点击
 */
- (void)plusClick
{
    // 通知代理
    if ([self.delegate respondsToSelector:@selector(tabBarDidClickPlusButton:)]) {
        [self.delegate tabBarDidClickPlusButton:self];
    }
}

- (void)layoutSubviews
{
#warning [super layoutSubviews] 一定要调用
    [super layoutSubviews];

    // 1.设置加号按钮的位置
    self.plusBtn.centerX = self.width * 0.5;
    self.plusBtn.centerY = self.height * 0.5;

    // 2.设置其他tabbarButton的位置和尺寸
    CGFloat tabbarButtonW = self.width / 5;
    CGFloat tabbarButtonIndex = 0;
    for (UIView *child in self.subviews) {
        Class class = NSClassFromString(@"UITabBarButton");
        if ([child isKindOfClass:class]) {
            // 设置宽度
            child.width = tabbarButtonW;
            // 设置x
            child.x = tabbarButtonIndex * tabbarButtonW;

            // 增加索引
            tabbarButtonIndex++;
            if (tabbarButtonIndex == 2) {
                tabbarButtonIndex++;
            }
        }
    }
}

@end

然后再在tabBarController中替换系统自带的tabbar

#import "ZGTabBarViewController.h"
#import "ZGTabBar.h"

@implementation HWTabBarViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    ZGTabBar *tabBar = [[HWTabBar alloc] init];
    [self setValue:tabBar forKeyPath:@"tabBar"];
    /*
     [self setValue:tabBar forKeyPath:@"tabBar"];相当于self.tabBar = tabBar;
     [self setValue:tabBar forKeyPath:@"tabBar"];这行代码过后,tabBar的delegate就是HWTabBarViewController
     说明,不用再设置tabBar.delegate = self;
     */
    /*
     1.如果tabBar设置完delegate后,再执行下面代码修改delegate,就会报错
     tabBar.delegate = self;

     2.如果再次修改tabBar的delegate属性,就会报下面的错误
     错误信息:Changing the delegate of a tab bar managed by a tab bar controller is not allowed.
     错误意思:不允许修改TabBar的delegate属性(这个TabBar是被TabBarViewController所管理的)
     */

}

@end
版权声明:本文为博主原创文章,未经博主允许不得转载。

自定义tabBarItem,仍是使用系统的tabBar

- (void)viewDidLoad { [super viewDidLoad]; // 使用系统自带的tabBar注意这两个函数的先后顺序 [self creat...

iOS自定义TabBar使用popToRootViewControllerAnimated重叠问题解决

先看下现象吧,如下图: 不仅仅重叠了,而且还把图标给覆盖了。很郁闷。 折腾了很久,终于找到解决办法了。 在自定也的NavigationController中添加如下代码: - (void)view...

《 Swift UITabBarController 的使用和自定义TabBar,和部分属性和代理的使用》

/*      《 Swift  UITabBarController 的使用和自定义TabBar,和部分属性和代理的使用》 */ /*     标签栏控制器是当前市场App...

自定义tabBar

  • 2014年09月29日 16:18
  • 3.75MB
  • 下载

自定义Tabbar

  • 2016年09月22日 14:42
  • 325KB
  • 下载

iOS11 自定义tabbar图标出现重影问题

大家在自定义tabbar的时候会将系统的tabbar干掉,然后放上自已自定义的tabbar(含有想要的Button)对不对,具体代码如下: /** * 添加自定义的tabBar */ -(v...

自定义tabbar

  • 2015年08月17日 19:24
  • 60KB
  • 下载

IOS自定义tabbar

  • 2015年11月06日 17:06
  • 148KB
  • 下载

Iphone将window的跟视图替换成自定义的TabBar视图

今天感觉很累了,就只将代码添出来,然后简单的做下说明: 我们在项目中应该会遇到UINavigationController和UITabBarController不能同时存在于window视图,但是往...
  • RiverAM
  • RiverAM
  • 2012年03月17日 21:44
  • 3738

自定义tabbar

  • 2016年01月06日 09:44
  • 24KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:自定义tabBar的使用
举报原因:
原因补充:

(最多只允许输入30个字)