StackoverFlow上看到的,通过继承UITabBarController创建自定义TabBarController。在原有TabBar的基础上添加一个背景层,在其基础上增加三个自定义按钮,通过设置按钮的背景图片及大小即可简单实现TabBar的自定义。

// CustomTabBarController.h

#import <UIKit/UIKit.h>

@interface CustomTabBarController : UITabBarController {

UIButton *settingsButton;

UIButton *infoButton;

UIButton *aboutUsButton;

}

@property (nonatomic, retain) UIButton *settingsButton;

@property (nonatomic, retain) UIButton *infoButton;

@property (nonatomic, retain) UIButton *aboutUsButton;

-(void) addCustomElements;

-(void) selectTab:(int)tabID;

@end

// CustomTabBarController.m

#import “CustomTabBarController.h”

@implementation CustomTabBarController

@synthesize settingsButton, infoButton, aboutUsButton;

- (void)viewDidAppear:(BOOL)animated {

[super viewDidAppear:animated];

}

-(void)viewDidLoad

{

[super viewDidLoad];

[self addCustomElements];

}

-(void)addCustomElements

{

// Background

UIImageView* bgView = [[[UIImageView alloc] initWithImage:[UIImageimageNamed:@”tabBarBackground.png”]] autorelease];

bgView.frame = CGRectMake(0, 420, 320, 60);

[self.view addSubview:bgView];

// Initialise our two images

UIImage *btnImage = [UIImage imageNamed:@”settings.png”];

UIImage *btnImageSelected = [UIImage imageNamed:@”settingsSelected.png”];

self.settingsButton = [UIButton buttonWithType:UIButtonTypeCustom]; //Setup the button

settingsButton.frame = CGRectMake(10, 426, 100, 54); // Set the frame (size and position) of the button)

[settingsButton setBackgroundImage:btnImage forState:UIControlStateNormal]; // Set the image for the normal state of the button

[settingsButton setBackgroundImage:btnImageSelectedforState:UIControlStateHighlighted]; // Set the image for the selected state of the button

[settingsButton setBackgroundImage:btnImageSelected forState:UIControlStateSelected];// Set the image for the selected state of the button

[settingsButton setBackgroundImage:btnImageSelected forState:UIControlStateDisabled];

[settingsButton setImage:btnImageSelected forState:(UIControlStateHighlighted|UIControlStateSelected)];

[settingsButton setTag:101]; // Assign the button a “tag” so when our “click” event is called we know which button was pressed.

[settingsButton setSelected:true]; // Set this button as selected (we will select the others to false as we only want Tab 1 to be selected initially

// Now we repeat the process for the other buttons

btnImage = [UIImage imageNamed:@”info.png”];

btnImageSelected = [UIImage imageNamed:@”infoSelected.png”];

self.infoButton = [UIButton buttonWithType:UIButtonTypeCustom];

infoButton.frame = CGRectMake(110, 426, 100, 54);

[infoButton setBackgroundImage:btnImage forState:UIControlStateNormal];

[infoButton setBackgroundImage:btnImageSelected forState:UIControlStateSelected];

[infoButton setBackgroundImage:btnImageSelected forState:UIControlStateHighlighted];

[infoButton setImage:btnImageSelected forState:(UIControlStateHighlighted|UIControlStateSelected)];

[infoButton setTag:102];

btnImage = [UIImage imageNamed:@”aboutUs.png”];

btnImageSelected = [UIImage imageNamed:@”aboutUsSelected.png”];

self.aboutUsButton = [UIButton buttonWithType:UIButtonTypeCustom];

aboutUsButton.frame = CGRectMake(210, 426, 100, 54);

[aboutUsButton setBackgroundImage:btnImage forState:UIControlStateNormal];

[aboutUsButton setBackgroundImage:btnImageSelected forState:UIControlStateSelected];

[aboutUsButton setBackgroundImage:btnImageSelectedforState:UIControlStateHighlighted];

[aboutUsButton setImage:btnImageSelected forState:(UIControlStateHighlighted|UIControlStateSelected)];

[aboutUsButton setTag:103];

// Add my new buttons to the view

[self.view addSubview:settingsButton];

[self.view addSubview:infoButton];

[self.view addSubview:aboutUsButton];

// Setup event handlers so that the buttonClicked method will respond to the touch up inside event.

[settingsButton addTarget:self action:@selector(buttonClicked:)forControlEvents:UIControlEventTouchUpInside];

[infoButton addTarget:self action:@selector(buttonClicked:)forControlEvents:UIControlEventTouchUpInside];

[aboutUsButton addTarget:self action:@selector(buttonClicked:)forControlEvents:UIControlEventTouchUpInside];

}

- (void)buttonClicked:(id)sender

{

int tagNum = [sender tag];

[self selectTab:tagNum];

}

- (void)selectTab:(int)tabID

{

switch(tabID)

{

case 101:

[settingsButton setSelected:true];

[infoButton setSelected:false];

[aboutUsButton setSelected:false];

break;

case 102:

[settingsButton setSelected:false];

[infoButton setSelected:true];

[aboutUsButton setSelected:false];

break;

case 103:

[settingsButton setSelected:false];

[infoButton setSelected:false];

[aboutUsButton setSelected:true];

break;

}

self.selectedIndex = tabID;

}

- (void)dealloc {

[settingsButton release];

[infoButton release];

[aboutUsButton release];

[super dealloc];

}

@end

转载自: http://blog.163.com/l1_jun/blog/static/143863882012101545146269/

 

简单实现TabBar的自定义的更多相关文章

  1. 简单的例子了解自定义ViewGroup(一)

    在Android中,控件可以分为ViewGroup控件与View控件.自定义View控件,我之前的文章已经说过.这次我们主要说一下自定义ViewGroup控件.ViewGroup是作为父控件可以包含多 ...

  2. KVC替换系统的tabbar为自定义tabbar---秀清

    CustomTabbar *tabbar = [[CustomTabbar alloc]init]; //KVC,更换系统的tabbar为自定义tabbar tabbar.tabbarDelegate ...

  3. 简单实现Tabbar的隐藏显示动画 By H罗

    简单实现Tabbar的隐藏显示动画 Hide Tabbar Controller with Animation - (void)setTabBarVisible:(BOOL)visible anima ...

  4. FusionCharts简单教程(三)-----如何自定义图表上的工具提示

    最近有蛮多人总是问我这个FusionCharts制表的问题,帮助他们解决之后,在昨晚发现以前整理的笔记中有这个简单教程,而且以前也发表了几篇这个博文,所以就将其全部上传上来供别人参考.如有不正确之处望 ...

  5. [安卓] 18、一个简单的例子做自定义动画按钮和自定义Actionbar

    在做安卓UI的时候有时候需自定义具有动画效果的按钮或需要自定义一下actionbar~ 本节用一个简单的demo讲如何自定义具有动画效果的按钮,以及个性化的actionbar 下面是效果: 其中: △ ...

  6. 简单天气应用开发——自定义TableView

    顺利解析JSON数据后,天气数据已经可以随意提取了,现在要做的就是建立一个简单的UI. 实况信息较为简单,几个Lable就可以解决.主要是七天天气预报有点麻烦,那是一个由七个字典构成的数组,需要提取出 ...

  7. iOS彩票项目--第一天,自定义TabBar控制器和自定义TabBar,自定义导航控制器

    一.环境配置,和项目层次搭建 二.自定义TabBar 项目中TabBar中的导航按钮美工给的图片太大,图片中包含了图片和文字.最主要的是TabBar上面的按钮图片尺寸是有规定的,当高度大于44的时候, ...

  8. FusionCharts简单教程(六)-----如何自定义图表上的工具提示

          所谓图表上的工具提示就是当鼠标放在某个特定的数据块上时所显示的提示信息.如下: 禁用显示工具提示       在默认情况下工具提示功能是显示的,但是有时候我们并不是很想需要这个功能提示功能 ...

  9. structs2标签简单实用,及自定义转换器示例代码

    一.在structs.xml中配置 <structs> <package name="tagp" namespace="/test" exte ...

随机推荐

  1. 九度OJ 1097:取中值 (中值)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5092 解决:1411 题目描述: 存在两组数组,和4个数字a,b,c,d,要求做如下操作,将第一个数组第a个数到第b个数,第二个数组的第c ...

  2. Django学习之站点缓存详解

      本文和大家分享的主要是django缓存中站点缓存相关内容,一起来看看吧,希望对大家学习django有所帮助. 缓存整个站点,是最简单的缓存方法 在 MIDDLEWARE_CLASSES 中加入 “ ...

  3. Unable to start adb server: adb server version (32) doesn't match this client (39); killing...

    关于Android studio 连接不上adb问题,有人说重启机器,有人说重启工具,也有人说adb kill-server.然后我都尝试过依然没有解决.通过各种查询.最终成功的解决!!! adb n ...

  4. Codeforces Round #373 (Div. 2) Anatoly and Cockroaches —— 贪心

    题目链接:http://codeforces.com/contest/719/problem/B B. Anatoly and Cockroaches time limit per test 1 se ...

  5. php-get和post请求

    1.get请求 <?php //判断20130101是否是工作日 //工作日对应结果为 0, 休息日对应结果为 1, 节假日对应的结果为 2: $url='http://www.easybots ...

  6. Duplicate files copied in APK META-INF/DEPENDENCIES

    在app的目录下找到build.gradle 这个文件,在android标签的最后面加入以下信息: packagingOptions { exclude 'META-INF/DEPENDENCIES' ...

  7. 关于「环境变量」PATH,CLASSPATH

    以前在Windows中配置Java环境变量的时候初次遇到要配置环境变量,当时并不知道那是干什么用的,只知道配置了之后,在任何一个文件夹都可以使用"javac"命令来编译java文件 ...

  8. HihoCoder 1590 : 紧张的会议室(区间最大+离散化)

    时间限制:20000ms 单点时限:2000ms 内存限制:256MB 描述 小Hi的公司最近员工增长迅速,同时大大小小的会议也越来越多:导致公司内的M间会议室非常紧张. 现在小Hi知道公司目前有N个 ...

  9. C++之引用&的详解

    C++中的引用: 引用引入了对象的一个同义词.定义引用的表示方法与定义指针相似,只是用&代替了*.引用(reference)是c++对c语言的重要扩充.引用就是某一变量(目标)的一个别名,对引 ...

  10. 【225】ArcEngine 实现要素添加 & 删除

    参考:ArcGIS Engine效率探究——要素的添加和删除.属性的读取和更新 删除要素 //添加图层,显示在最上面 axMapControl1.AddShapeFile(@"D:\01-业 ...