简单实现TabBar的自定义
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/
最新文章
- 如何解决流程开发中SheetRadioButtonList页面取值问题
- Hmmer安装与使用
- MS SQL 合并结果集并求和 分类: SQL Server 数据库 2015-02-13 10:59 92人阅读 评论(0) 收藏
- Python学习笔记——部分常用/特殊用法
- SQL 创建一个只读账户 .
- SDAccel-FPGA将带来至多25倍单位功耗性能提升
- 关于Windows 7的64位系统不兼容某些控件的问题
- onethink对二维数组结果集进行排序
- Android开发错误汇总
- 初识HTML5
- JS浏览器类型推断方法
- 【ASP.NET MVC】jqGrid 增删改查详解
- linux shell 中的 2>;&;1 用法说明
- Ubuntu 16.04.4 LTS下安装JDK
- c/c++ 继承与多态 继承中的public, protected, private
- Weekly Contest 119
- css 实现等分布局
- 【CentOS】JDK的安装
- python - 发送html格式的邮件
- ECharts设置y轴显示