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. Spring整合Hibernate的方法

    一.基本支持 Spring 支持大多数流行的 ORM 框架, 包括 Hibernate JDO, TopLink, Ibatis 和 JPA. Spring 对这些 ORM 框架的支持是一致的, 因此 ...

  2. access 连接数据库

    前提条件 如果没有安装office的话,需要安装引擎 安装了office就不用安装引擎 连接数据库 Dim plMydb As Microsoft.Office.Interop.Access.Dao. ...

  3. 代码空间项目 -- InstantiationException的异常

    java.lang.InstantiationException实例化异常.当试图通过newInstance()方法创建某个类的实例,而该类是一个抽象类或接口时,抛出该异常. 这次项目中查询type时 ...

  4. Exam 70-762 Developing SQL Databases

    这个考试还是很有用的,教了很多有用的东西,不错,虽然考试需要很多钱,不过值的尝试.虽然用了sql server 这么多年但是对于事务.多并发的优化还是处于小学生的水平,通过这次考试争取让自己提一个档次 ...

  5. Windows程序设计(1)——Win32运行原理(三)

    进程控制 1 获得系统进程 2 终止当前进程 3 终止其他进程 4 进程控制 4.1 获得系统进程 使用toolhelp模块可以实现获取系统中当前运行当中的进程列表. 思路如下,使用CreateToo ...

  6. css position弹性盒子测试

    总结: 1.利用样式height:100%设置div高度为全屏时候必须设置所有的父元素,但是父元素那么多,不可控,所以此法不可行: 2.设置父框架的padding为100px,div进行float,p ...

  7. oracle查看锁表进程,杀掉锁表进程

    查看锁表进程SQL语句1: select sess.sid,     sess.serial#,     lo.oracle_username,     lo.os_user_name,     ao ...

  8. 简单封装微信小程序

    一.不同环境配置封装 新建config文件夹,根据自己有不同环境设置不同的js文件 具体js文件内容: exports.config = { requestHost: 'https://******. ...

  9. vi编辑器的使用(2)

    1.4 光标移动 vi编辑器中的很多命令都是基于光标当前位置的,因此,如何移动光标定位到所需要的位置是一项十分重要的工作,下面进行详细介绍(如无特别说明,下面所讲的命令都是在普通模式下执行). 1. ...

  10. android jni下c文件怎么输出logcat

    #include <android/log.h> #define LOG_TAG "clog"#define LOGD(...) __android_log_print ...