本文转载自:http://blog.sina.com.cn/s/blog_79c5bdc30100t88i.html

我自己实现的一种可以很方便的实现更换TabBarController图片的方法,代码如下:

#import <UIKit/UIKit.h>

@interface CustomTabBarViewController : UITabBarController {

UIImage                             *_tabBarBackgroundImage;  //整个tabBar的背景

NSMutableArray                       *_unSelectedImageArray;   //非选中效果的tabBarItem数组

NSMutableArray                       *_selectedImageArray;     //选中效果的tabBarItem数组

NSMutableArray                       *_itemBgImageViewArray;     //item背景UIIMageView数组

int                                  _lastSelectedIndex;   //上一次选中的tabBarItem的index

int                                  _hiddenIndex;

}

@property (nonatomic, retain) UIImage                           *tabBarBackgroundImage;

@property (nonatomic, retain) NSMutableArray                    *unSelectedImageArray;

@property (nonatomic, retain) NSMutableArray                    *selectedImageArray;

@property (nonatomic, retain) NSMutableArray                    *itemBgImageViewArray;

@property (nonatomic, assign) int                               lastSelectedIndex;

@property (nonatomic, assign) int                               hiddenIndex;

- (id)initWithTabBarBackgroundImage:(UIImage *)barBackgroundImage

unSelectedImageArray:(NSMutableArray *)unImageArray

selectedImageArray:(NSMutableArray *)imageArray;

//隐藏某个tabBarItem的图片

-(void)hiddeItemImageView:(int)index;

//显示某个tabBarItem的图片

-(void)showItemImageView:(int)index;

@end

#import "CustomTabBarViewController.h"

#define TabBarBackgroundImageViewTag 11111

@implementation CustomTabBarViewController

@synthesize tabBarBackgroundImage                       = _tabBarBackgroundImage;

@synthesize unSelectedImageArray                        = _unSelectedImageArray;

@synthesize selectedImageArray                          = _selectedImageArray;

@synthesize itemBgImageViewArray                        = _itemBgImageViewArray;

@synthesize lastSelectedIndex                           = _lastSelectedIndex;

@synthesize hiddenIndex                                 = _hiddenIndex;

- (void)dealloc

{

self.tabBarBackgroundImage = nil;

self.unSelectedImageArray = nil;

self.selectedImageArray = nil;

self.itemBgImageViewArray = nil;

[super dealloc];

}

- (void)didReceiveMemoryWarning

{

// Releases the view if it doesn't have a superview.

[super didReceiveMemoryWarning];

// Release any cached data, images, etc that aren't in use.

self.tabBarBackgroundImage = nil;

}

- (id)initWithTabBarBackgroundImage:(UIImage *)barBackgroundImage

unSelectedImageArray:(NSMutableArray *)unImageArray

selectedImageArray:(NSMutableArray *)imageArray {

self = [super init];

if (self) {

//        self.tabBarBackgroundImage = barBackgroundImage;

//        self.unSelectedImageArray = unImageArray;

//        self.selectedImageArray = imageArray;

//

//        self.itemBgImageViewArray = [NSMutableArray array];

//        _lastSelectedIndex = 0;

//        _hiddenIndex = -1;

}

return self;

}

- (id)init {

self = [super init];

if (self) {

//        self.tabBarBackgroundImage = [UIImage imageNamed:@"menu_bg.png"];

//

//        NSMutableArray *aunSelectedImageArray = [[NSMutableArray alloc] initWithObjects:[UIImage imageNamed:@"menu_paiyou.png"],

//                                                 [UIImage imageNamed:@"menu_chat.png"],

//                                                 [UIImage imageNamed:@"menu_map.png"],

//                                                 [UIImage imageNamed:@"menu_renwu.png"],

//                                                 [UIImage imageNamed:@"menu_huibao.png"], nil];

//        self.unSelectedImageArray = aunSelectedImageArray;

//        [aunSelectedImageArray release];

//

//        NSMutableArray *aselectedImageArray = [[NSMutableArray alloc] initWithObjects:[UIImage imageNamed:@"menu_paiyou_pressed.png"],

//                                               [UIImage imageNamed:@"menu_chat_pressed.png"],

//                                               [UIImage imageNamed:@"menu_map_pressed.png"],

//                                               [UIImage imageNamed:@"menu_renwu_pressed.png"],

//                                               [UIImage imageNamed:@"menu_huibao_pressed.png"], nil];

//        self.selectedImageArray = aselectedImageArray;

//        [aselectedImageArray release];

//

//        self.itemBgImageViewArray = [NSMutableArray array];

//        _lastSelectedIndex = 0;

//        _hiddenIndex = -1;

}

return self;

}

#pragma mark - itemIndex methods

- (void)setLastSelectedIndex:(int)lastSelectedIndex {

if (_lastSelectedIndex != lastSelectedIndex) {

//将上次的选中效果取消

UIImageView *lastSelectedImageView = (UIImageView *)[_itemBgImageViewArray objectAtIndex:_lastSelectedIndex];;

lastSelectedImageView.image = [_unSelectedImageArray objectAtIndex:_lastSelectedIndex];

_lastSelectedIndex = lastSelectedIndex;

}

}

- (void)setSelectedIndex:(NSUInteger)selectedIndex {

[super setSelectedIndex:selectedIndex];

//将上次的选中效果取消

self.lastSelectedIndex = selectedIndex;

//将本次的选中效果显示

UIImageView *selectedImageView = (UIImageView *)[_itemBgImageViewArray objectAtIndex:selectedIndex];

selectedImageView.image = [_selectedImageArray objectAtIndex:selectedIndex];

}

//隐藏某个tabBarItem的图片

- (void)hiddeItemImageView:(int)index {

if (_hiddenIndex != index) {

_hiddenIndex = index;

UIImageView *hiddenImageView = (UIImageView *)[_itemBgImageViewArray objectAtIndex:_hiddenIndex];

hiddenImageView.hidden = YES;

}

}

//显示某个tabBarItem的图片

- (void)showItemImageView:(int)index {

if (_hiddenIndex == index) {

UIImageView *hiddenImageView = (UIImageView *)[_itemBgImageViewArray objectAtIndex:_hiddenIndex];

hiddenImageView.hidden = NO;

_hiddenIndex = -1;

}

}

#pragma mark - View lifecycle

// Implement loadView to create a view hierarchy programmatically, without using a nib.

- (void)loadView

{

[super loadView];

self.tabBarBackgroundImage = [UIImage imageNamed:@"menu_bg.png"];

NSMutableArray *aunSelectedImageArray = [[NSMutableArray alloc] initWithObjects:[UIImageimageNamed:@"menu_paiyou.png"],

[UIImage imageNamed:@"menu_chat.png"],

[UIImage imageNamed:@"menu_map.png"],

[UIImage imageNamed:@"menu_renwu.png"],

[UIImage imageNamed:@"menu_huibao.png"], nil];

self.unSelectedImageArray = aunSelectedImageArray;

[aunSelectedImageArray release];

NSMutableArray *aselectedImageArray = [[NSMutableArray alloc] initWithObjects:[UIImageimageNamed:@"menu_paiyou_pressed.png"],

[UIImage imageNamed:@"menu_chat_pressed.png"],

[UIImage imageNamed:@"menu_map_pressed.png"],

[UIImage imageNamed:@"menu_renwu_pressed.png"],

[UIImage imageNamed:@"menu_huibao_pressed.png"], nil];

self.selectedImageArray = aselectedImageArray;

[aselectedImageArray release];

self.itemBgImageViewArray = [NSMutableArray array];

_lastSelectedIndex = 0;

_hiddenIndex = -1;

}

#define ItemWidth 50

#define ItemHeight 49

#define SideMarginX 7

#define SideMarginY 0.5

#define Spacing 14

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.

- (void)viewDidLoad

{

[super viewDidLoad];

UIImageView *tabBarBackgroundImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0,self.tabBar.frame.size.width, self.tabBar.frame.size.height)];

tabBarBackgroundImageView.tag = TabBarBackgroundImageViewTag;

tabBarBackgroundImageView.contentMode = UIViewContentModeScaleAspectFit;

tabBarBackgroundImageView.image = _tabBarBackgroundImage;

[self.tabBar insertSubview:tabBarBackgroundImageView atIndex:0];

[tabBarBackgroundImageView release];

for (int i = 0; i < 5; i++) {

UIImageView *itemBg  = [[UIImageView alloc] initWithFrame:CGRectMake(SideMarginX +ItemWidth * i + Spacing * i, SideMarginY, ItemWidth, ItemHeight)];

itemBg.contentMode = UIViewContentModeScaleAspectFit;

itemBg.image = [_unSelectedImageArray objectAtIndex:i];

[self.tabBar insertSubview:itemBg atIndex:1];

[_itemBgImageViewArray addObject:itemBg];

[itemBg release];

}

self.selectedIndex = 0;

}

- (void)viewDidUnload

{

[super viewDidUnload];

// Release any retained subviews of the main view.

// e.g. self.myOutlet = nil;

self.itemBgImageViewArray = nil;

}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

{

// Return YES for supported orientations

return (interfaceOrientation == UIInterfaceOrientationPortrait);

}

#pragma mark - UITabBarDelegate

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item {

self.selectedIndex = [tabBar.items indexOfObject:item];

}

@end

方法二:http://www.cocoachina.com/bbs/read.php?tid-62061-page-1.html

方法三:http://hi.baidu.com/yunhuaikong/blog/item/b0642bcbfc5ae49fc817684c.html
自定义Badge:https://github.com/boctor/idev-recipes/tree/master/CustomTabBarNotification
一些自定义控件:https://github.com/boctor/idev-recipes/tree/master/CustomTabBarNotification

自定义的tabBarController的几种方法的更多相关文章

  1. WPF编程,使用WindowChrome实现自定义窗口功能的一种方法。

    原文:WPF编程,使用WindowChrome实现自定义窗口功能的一种方法. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/arti ...

  2. WPF编程,自定义鼠标形状的一种方法。

    原文:WPF编程,自定义鼠标形状的一种方法. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/article/details/8727 ...

  3. Ajax设置自定义请求头的两种方法

    用自定义请求头token为例 方法一 $.ajax({ type: "post", url:"http://127.0.0.1:4564/bsky-app/templat ...

  4. python中自定义超时异常的几种方法

    最近在项目中调用第三方接口时候,经常会出现请求超时的情况,或者参数的问题导致调用异代码异常.针对超时异常,查询了python 相关文档,没有并发现完善的包来根据用户自定义的时间来抛出超时异常的模块.所 ...

  5. springmvc跳转到自定义404页面的三种方法

    有时候我们并不想跳转到系统自定义的错误页面中,那么我们需要自定义页面并且实现它的跳转 有三种方法可以实现 方法一:最简单的实现,也是最快的 在<web-app>节点下配置 代码如下: &l ...

  6. Chrome模拟手机浏览器(iOS/Android)的三种方法,亲测无误!

    大网站都有推出自己的手机访问版本页面,不管是新闻类还是视频网站,我们在电脑是无法直接访问到手机网站的,比如我经常访问一个3g.qq.com这个手机站点,如果在电脑上直接打开它,则会跳转到其它页面,一般 ...

  7. 用Fiddler可以设置浏览器的UA 和 手动 --Chrome模拟手机浏览器(iOS/Android)的三种方法,亲测无误!

    附加以一种软件的方法是:用Fiddler可以设置浏览器的UA 以下3种方法是手动的 通过伪装User-Agent,将浏览器模拟成Android设备. 第一种方法:新建Chrome快捷方式 右击桌面上的 ...

  8. 关于iOS自定义UITabBar的几种方法

    作为iOS开发最常用的两个多视图控制器 NavigationController 和 TabBarController 已经很强大了,基本上在大部分的应用中都能看到它们的影子.但是在使用的过程中,系统 ...

  9. iOS 中使用 XIB 自定义cell 的两种方法 以及 编译出现常见 的错误 ++++(xcode6.0之后)

    一. 注册cell 1.创建自定义cell并勾选 xib :(勾选xib就会自动生成与cell文件关联的xib) 2.在 tableViewController里注册自定义Cell (或者遵守tabl ...

随机推荐

  1. openjudge-NOI 2.6-1759 最长上升子序列

    题目链接:http://noi.openjudge.cn/ch0206/1759/ 题解: 奇怪……之前博客里的o(nlogn)标程在codevs和tyvj上都能AC,偏偏它这里不行 #include ...

  2. ssh连接不上排查方法总结

    //常见报错信息 # No route to host --> server端没有开机或是网络不通(这个原因很多,最简单的是网线没有插.还有就是可能会是网卡down了等) 如果是网卡down了i ...

  3. LightOJ 1323 Billiard Balls(找规律(蚂蚁爬木棍))

    题目链接:https://vjudge.net/contest/28079#problem/M 题目大意: 一个边界长为L宽为W的平面同时发射n个台球,运动K秒,台球碰到桌面及两(多)个台球相撞情况如 ...

  4. 【转载】python import和from import

    import和from import都是将其他模块导入当前模块中. 刚开始一直以为import和from import唯一的区别,就是from import可以少写一些模块名.虽然from XX im ...

  5. hdu 5875(单调栈)

    Function Time Limit: 7000/3500 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total ...

  6. Reverse Linked List I&&II——数据结构课上的一道题(经典必做题)

    Reverse Linked List I Question Solution Reverse a singly linked list. Reverse Linked List I 设置三个指针即可 ...

  7. [你必须知道的.NET]第二十二回:字符串驻留(上)---带着问题思考

    发布日期:2008.8.27 作者:Anytao © 2008 Anytao.com ,Anytao原创作品,转贴请注明作者和出处. 说在,开篇之前 走钢丝的人,在刺激中体验快感.带着问题思考,在问题 ...

  8. [笔记] 几个前端bug的解决方案

    jQuery UI下被拖动的元素上飘 症状出现在几乎所有浏览器里.使用 1.10.x 的draggable,在滚动栏下移(即非处于页面顶部)的时候拖动draggable的元素,它会向上跳一段距离.解决 ...

  9. 【58沈剑架构系列】细聊分布式ID生成方法

    一.需求缘起 几乎所有的业务系统,都有生成一个记录标识的需求,例如: (1)消息标识:message-id (2)订单标识:order-id (3)帖子标识:tiezi-id 这个记录标识往往就是数据 ...

  10. RecyclerView悬浮标题

    效果图:        1.顶部会悬浮章的部分 2.第二章上滑会推挤第一章 3.第二章下拉会带出第一章 4.并不是所有时候都有悬浮部分(为什么这条标红,因为市面上几乎所有的悬浮都是必须存在且在顶部,害 ...