自定义tabbar的基本封装

原创 2016年06月01日 17:28:21

博主因为一直使用同一个框架,而今日跟一个设计师连天,说到切图,关于切图的规范讨论了好久,从设计师的角度他们切的图都是图标边缘开始切,是不会带空白部分的(前提是自己画的图标,从别的地方copy进ps的设计师的图标就算了),聊到这个,博主不禁说有些地方需要他们专门给我留白,甚至切一大块,然后就说到了tabbar,假如我的tabbar有三个item,那么我让设计师切图就是320/3的长,其实是自己偷懒了,包括输入框左视图,我做的时候因为偷懒会需要设计师专门给我把图标拉出来切出一块带空白边框的icon图标,于是博主觉得不能这么懒下去,根据设计师给的图,没有做不出来的工程师,只有偷懒的工程师,所以今天博主就封装了这个tabbar的工程,封装代码如下:

#import <UIKit/UIKit.h>

@interface LHHTabbar : UIView
/*
 bgImageName和isUse只能有一个使用另一个必为nil,用来设置整个Tabbar背景色
 */
-(void)creatLHHTabbarWithBackGroundImage:(NSString *)bgImageName orUseBackGroundView:(BOOL)isUse ifUseBGViewWithColor:(UIColor *)bgViewColor withViewControllerArray:(NSArray *)controllerArray withNormalImageArray:(NSArray *)normalImageArray withSelectImageArray:(NSArray *)selectImageArray withTabbarItemTitleArray:(NSArray *)itemTitleArray withTarget:(id)currentTarget withSelector:(SEL)selector;
@end
#import "LHHTabbar.h"

@implementation LHHTabbar


-(void)creatLHHTabbarWithBackGroundImage:(NSString *)bgImageName orUseBackGroundView:(BOOL)isUse ifUseBGViewWithColor:(UIColor *)bgViewColor withViewControllerArray:(NSArray *)controllerArray withNormalImageArray:(NSArray *)normalImageArray withSelectImageArray:(NSArray *)selectImageArray withTabbarItemTitleArray:(NSArray *)itemTitleArray withTarget:(id)currentTarget withSelector:(SEL)selector
{
    //创建tabbar背景色,可用图片背景也可用纯色view设置背景
    [self creatLHHTabbarWithBackGroundImage:bgImageName orUseBackGroundView:isUse ifUseBGViewWithColor:bgViewColor];
    //创建选择器
    for (int i=0; i<controllerArray.count; i++) {
        [self creatLHHTabbarItemwithViewControllerArray:(NSArray *)controllerArray withNormalImageArray:normalImageArray withSelectImageArray:selectImageArray withTabbarItemTitleArray:(NSArray *)itemTitleArray withIndex:(NSUInteger)i withTarget:currentTarget withSelector:selector];
    }

}

-(void)creatLHHTabbarWithBackGroundImage:(NSString *)bgImageName orUseBackGroundView:(BOOL)isUse ifUseBGViewWithColor:(UIColor *)bgViewColor
{
    if (bgImageName!=nil) {
        UIImageView *imageView=[[UIImageView alloc]initWithFrame:self.bounds];
        imageView.image=[UIImage imageNamed:bgImageName];
        [self addSubview:imageView];
    }
    else
    {
        UILabel *view=[[UILabel alloc]initWithFrame:self.bounds];
        view.backgroundColor=bgViewColor;
        [self addSubview:view];
    }
}
-(void)creatLHHTabbarItemwithViewControllerArray:(NSArray *)controllerArray withNormalImageArray:(NSArray *)normalImageArray withSelectImageArray:(NSArray *)selectImageArray withTabbarItemTitleArray:(NSArray *)itemTitleArray withIndex:(NSUInteger)currentIndex withTarget:(id)currentTarget withSelector:(SEL)selector
{
    UIView *bgView=[[UIView alloc]initWithFrame:CGRectMake((self.bounds.size.width/controllerArray.count)*currentIndex, 0, self.bounds.size.width/controllerArray.count, self.bounds.size.height)];
    if (currentIndex==0) {
//        bgView.backgroundColor=[UIColor grayColor];
    }
    else
        bgView.backgroundColor=[UIColor clearColor];
    [self addSubview:bgView];

    UIImageView *imageView=[[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 20, 20)];
    imageView.center=CGPointMake(self.bounds.size.width/controllerArray.count/2, self.bounds.size.height/2-10);
    imageView.tag=currentIndex;
    imageView.userInteractionEnabled=YES;
    if (currentIndex==0) {
        imageView.image=[UIImage imageNamed:selectImageArray[currentIndex]];
    }
    else
        imageView.image=[UIImage imageNamed:normalImageArray[currentIndex]];
    [bgView addSubview:imageView];


    UILabel *label=[[UILabel alloc]initWithFrame:CGRectMake(0, imageView.center.y+20/2, self.bounds.size.width/controllerArray.count, self.bounds.size.height-(imageView.center.y+20/2))];
    label.text=itemTitleArray[currentIndex];
//    label.tag=currentIndex;
    if (currentIndex==0) {
        label.textColor=[UIColor colorWithRed:0.00f green:0.76f blue:0.83f alpha:1.00f];
    }
    else
        label.textColor=[UIColor whiteColor];
    label.textAlignment=NSTextAlignmentCenter;
    label.font=[UIFont systemFontOfSize:10];
    [bgView addSubview:label];

    UIButton *button=[UIButton buttonWithType:UIButtonTypeRoundedRect];
    button.frame=CGRectMake(0, 0, bgView.frame.size.width, bgView.frame.size.height);
    button.tag=currentIndex;
    [button addTarget:currentTarget action:selector forControlEvents:UIControlEventTouchUpInside];
    [bgView addSubview:button];
}

/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
    // Drawing code
}
*/

@end

当然,封装的方法各式各样,博主这么写也只是觉得方便自己的习惯,像里面的一些字典其实也可以写成一个plist文件来用的,原理都一样,下面把下载地址放在github上了:https://github.com/codeliu6572/ProjectTabbar
还有navigation的封装,博主没有写,其实都很简单,大家用得到的自己封装下。

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

完美封装 tabBar 自定义加号按钮

1.自定义TabBarController 1.自定义继承于UITabBarController 2.利用KVC 替换系统的tabBar 3. 利用appearance 全局统一设置UITabBar...
  • WZios
  • WZios
  • 2016年06月15日 14:02
  • 1972

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

iOS 封装UITabBarController(一)

现在做项目,差不多都会用到UITabBarController,如果没有好的封装思想会有很多的冗余代码,所有,我这里做了一个简单的封装,但是不是最完整的代码,下一版的博客会更新自定义tabBar的代码...
  • Arodung
  • Arodung
  • 2016年03月24日 22:30
  • 1070

iOS 封装UITabBarController(二)

无聊的时候,就抠抠脚,无聊的时候,吃吃手,无聊的时候,自定义一个TabBar,苹果的东西很神奇,KVO和KVC都是很 diao 的机制,有些系统的东西拿不到就用KVO,然后就能实现很多功能,拿到私有的...
  • Arodung
  • Arodung
  • 2016年03月28日 23:09
  • 946

iOS开发之模仿简书App自定义TabBar详解

iOS自定义TabBar

iOS开发进阶-用最简单的方式自定义TabBar

本文将从一个具体的实例出发,介绍如何比较简单的自定义类似咸鱼的TabBar。...

自定义UITabbarController及向UITabBar中添加自定义按钮

在某些项目的初期我们经常会选择使用UITabbarController或者是UINavigationController或者是两者的结合,经常需要自定义自己需要的类,本文讲述了自定义UITabbarC...

微信小程序自定义tabbar

原文地址:http://www.wxapp-union.com/article-1405-1.html 1.创建wxml模板 ...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

自定义UITabBarController、UITabBar和UIButton

通常情况下,在实际开发过程中经常需要自定义UITabBarController,并且很有可能还涉及到自定义UITabBar和UIButton的情况。就以闲鱼为例,我们尝试着模仿一下它。  为了更好的演...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:自定义tabbar的基本封装
举报原因:
原因补充:

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