本文转载自: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. 2017 NEERC

    2017 NEERC Problem A. Archery Tournament 题目描述:在二维平面上,会陆续出现一些圆,以及一些询问,询问点是否在圆内,如果是,则输出那个圆,并把那个圆删掉,否则输 ...

  2. linux 实现自动创建ftp用户并创建文件夹

    创建一个 createuser.sh的脚本文件 #!/bin/sh #传入的文件名 name=$1 #创建该用户所对应的ftp文件夹   /srv/ftp是我的ftp服务器的根目录 mkdir /sr ...

  3. PHP利用rand(1,100)函数产生10个1~100之间的随机数

    //echo rand(1,100); $max=0; $min=100; for($i=0;$i<=9;$i++){ $rand[$i]=rand(1,100); if($rand[$i]&g ...

  4. C语言俄罗斯方块

    #include <windows.h> #include <stdio.h> #include <time.h> #include <conio.h> ...

  5. 环状序列(UVa1584)

    题目具体描述见:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_prob ...

  6. Python的hasattr() getattr() setattr() 函数使用方法(简介)

    hasattr(object, name)判断一个对象里面是否有name属性或者name方法,返回BOOL值,有name特性返回True, 否则返回False.需要注意的是name要用括号括起来 1 ...

  7. 如何才能通俗易懂地解释JS中的的"闭包"?

    看了知乎上的话题 如何才能通俗易懂的解释javascript里面的‘闭包’?,受到一些启发,因此结合实例将回答中几个精要的答案做一个简单的分析以便加深理解. 1. "闭包就是跨作用域访问变量 ...

  8. SQL Server 执行计划分析

    当一个查询到达数据库引擎时,SQL Server执行两个主要的步骤来产生期望的查询结果: 第一步:查询编译,生成查询计划. 第二步:执行这个查询计划. 1. 用于演示分析执行计划的查询语句 /* 查询 ...

  9. js中箭头函数和普通函数this的区别

    最近在学习angularJs的时候由于里面涉及到了箭头函数,箭头函数除了声明上有点区别以外,和普通函数最主要的区别还是在this的问题上. Js中函数中嵌套的函数this不会 “继承”.比如说以下代码 ...

  10. 【面试总结-编程】多行两列数据,实现同key的value求和并输出

    一个文件,两列,多行. 第一列是字母,第二列是数字,同列数据之间通过空格分割. 统计首列字母相同的第二列之和. 样例输入: A 5 B 6 OO 7 A 6 A 2 OO 2 输出: A:13 B:6 ...