本文转载自: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. python魔法函数__dict__和__getattr__的妙用

    python魔法函数__dict__和__getattr__的妙用 __dict__ __dict__是用来存储对象属性的一个字典,其键为属性名,值为属性的值. 既然__dict__是个字典那么我们就 ...

  2. C# 加密解密以及sha256不可逆加密案例

    class Program { static void Main(string[] args) { string aa = "身份证"; string bb = "key ...

  3. 72.Edit Distance---dp

    题目链接:https://leetcode.com/problems/edit-distance/description/ 题目大意:找出两个字符串之间的编辑距离(每次变化都只消耗一步). 法一(借鉴 ...

  4. HTTP协议头注射漏洞实例

    HTTP 响应头文件中包含未经验证的数据会引发 cache-poisoning.cross-site scripting.cross-user defacement.page hijacking.co ...

  5. postgresql 数据导入导出

    [转] 分类: postgresql2013-06-09 10:21 2486人阅读 评论(0) 收藏 举报 一.导出数据库及具体表 1.导出数据库:方式一:pg_dump  -U  postgres ...

  6. DotNetOpenAuth实践之Webform资源服务器配置

    系列目录: DotNetOpenAuth实践系列(源码在这里) 上篇我们讲到WebApi资源服务器配置,这篇我们说一下Webform下的ashx,aspx做的接口如何使用OAuth2认证 一.环境搭建 ...

  7. 【WPF】OnApplyTemplate

    操作模板控件 在做WPF开发的时候,我们通常因为满足不同的需求会开发一些自定义控件来满足需要,我们会自定义模板来定义控件的外观,添加命令和路由事件来给控件添加行为,那如何在模板中查找元素并关联事件处理 ...

  8. Qt基础——让使用Designer创建的UI也能自动适应窗口大小

    原文请看:http://www.cnblogs.com/linmeng/archive/2012/07/05/2559259.html 我们知道,通过Qt的各种Layout可以实现控件的自动布局. 但 ...

  9. maven的认识

    >>>>>>>>>> 安装完成后,设置为环境变量 命令行输入,如下图片就表明成功 >>>>>>>& ...

  10. Mock(模拟后端接口数据)配合Vuex的使用

    1.下载Mock  cnpm install Mockjs -S 2.新建一个data.js存放新生成的mock文件 编辑mock  并导出 const Mock = require('mockjs' ...