自定义TabBar第一种方案

自定义tabBar能够解决自定义图片无法显示(只显示一块颜色)这个弊端,自定义tabBar要继承UITabBarController

原图片:

(1),  (2), (3),  (4), (5)

下面是自定义了一个TabBar ,每个按钮可以显示图片(自定义避免了图片无法显示只显示一块颜色)

效果图:

代码实现:

- (void)loadViewController

{

CoverCollectionViewController *coverVC = [[CoverCollectionViewController alloc] init];

coverVC.title = @"每日封面";

CustomizedNavigationController *coverNaVC = [[CustomizedNavigationController alloc]initWithRootViewController:coverVC];

coverNaVC.navigationItem.title = @"iDailyWATCh";

NewsTableViewController *newsVC = [[NewsTableViewController alloc] init];

newsVC.title = @"腕表杂志";

CustomizedNavigationController *newsNaVC = [[CustomizedNavigationController alloc]initWithRootViewController:newsVC];

BrandsTableViewController *brandsVC = [[BrandsTableViewController alloc] init];

brandsVC.title = @"品牌维基";

CustomizedNavigationController *brandsNaVC = [[CustomizedNavigationController alloc]initWithRootViewController:brandsVC];

VideosCollectionViewController *videosVC = [[VideosCollectionViewController alloc] init];

videosVC.title = @"视频";

CustomizedNavigationController *videosNaVC = [[CustomizedNavigationController alloc]initWithRootViewController:videosVC];

MoreViewController *moreVC = [[MoreViewController alloc] init];

moreVC.title = @"更多";

CustomizedNavigationController *moreNaVC = [[CustomizedNavigationController alloc]initWithRootViewController:moreVC];

self.viewControllers = @[coverNaVC, newsNaVC,
brandsNaVC, videosNaVC, moreNaVC];

//使用的宏释放内存:(#define RELEASE_SAFE(_Pointer) do{[_Pointer release],_Pointer = nil;}while(0)

)

RELEASE_SAFE(coverNaVC);

RELEASE_SAFE(coverVC);

RELEASE_SAFE(brandsNaVC);

RELEASE_SAFE(brandsVC);

RELEASE_SAFE(videosNaVC);

RELEASE_SAFE(videosVC);

RELEASE_SAFE(moreNaVC);

RELEASE_SAFE(moreVC);

}

- (void)loadCustomizedTabBarView

{

//初始化自定义TabBar背景

UIImageView *tabBarBG = [[UIImageView alloc] initWithFrame:CGRectMake(0, 519, 320, 49)];

tabBarBG.userInteractionEnabled = YES;

tabBarBG.image = [UIImage imageNamed:@"background"];

[self.view addSubview:tabBarBG];

[tabBarBG release];

//初始化自定义TabBarItem -> Button

for (int index = 0; index < 5;
index++) {

UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];

button.backgroundColor = [UIColor whiteColor];

button.tag = index;

NSString *imageName = [NSString stringWithFormat:@"%d",
index + 100];

[button setBackgroundImage:[UIImage imageNamed:imageName] forState:UIControlStateNormal];

button.frame = CGRectMake(3 + 64 *
index, 5, 290 / 5, 39);

[tabBarBG addSubview:button];

[button addTarget:self action:@selector(changeViewController:)forControlEvents:UIControlEventTouchUpInside];

}

}

//实现对应按钮和页面的跳转

- (void)changeViewController:(UIButton *)button

{

self.selectedIndex = button.tag;

}

时间: 2024-10-07 05:49:33

自定义TabBar第一种方案的相关文章

Struts1.X与Spring集成——第一种方案

spring+struts(第一种方案) 集成原理:在Action中取得BeanFactory,通过BeanFactory取得业务逻辑对象,调用业务逻辑方法. 一,新建一个项目Spring_Struts_01 二,步骤 1.spring和Struts的依赖包配置 *Struts (1)拷贝Struts和jstl的依赖包 (2)在web.xml文件中配置ActionServlet <span style="font-family:KaiTi_GB2312;font-size:18px;&qu

仿制新浪微博iOS客户端之三-自定义TabBar

继续上一篇文章的进度,我们实际完成了微博基本框架的搭建,具体实现的效果如下左图,但我们实际需要实现的效果为右图,除去主要的页面内容不谈,仅仅下面的TabBar距离我们的需求就有相当的差距.因此本文着重于实现需要的效果.                           再简要汇总一下我们的需求: 1.我们要在TabBar原有四个按钮的基础上,再增加一个按钮,作为撰写微博的入口: 2.新加入的按钮必须和原有按钮一起,均匀分布在TabBar上: 3.新加入的按钮只有图片,没有文字. 需求汇总如上,

Struts1.X与Spring集成——第二种方案

上篇博客介绍了Struts1.X与Spring集成的一种方案.Struts1.X与Spring集成--第一种方案 此篇博客还以上篇博客的登录例子为例,介绍Struts1.X与Spring集成的另一种方案. 1,第一种方案 原理 回忆第一种方案集成原理:在Action中取得BeanFactory,通过BeanFactory取得业务逻辑对象 此种方案的缺点:从严格意义的分层上来看,Action上看到了Spring的相关东西,依赖Spring API去查找东西,发生了依赖查找,因为要查找依赖对象,所以

HBase存储时间相关多列数据的两种方案

所谓“时间相关多列数据”指的是同一个Key下具有多个属性数据,并且这些数据与时间具有相关性,多数场景是该Key对应在不同时间时刻的行为数据.在实际应用中,这类数据很多,例如电子商务网站上用户最近一段时间浏览的宝贝集合.访问的URL列表等. 使用HBase存储此类数据时,有以下两种常用的方案: 多行单列 表结构设计 Row Key:用户标识ID + (Long.MAX_VALUE - timestamp) Column Family:’cf’ Column Qualifier:’’ Value:宝

[java代码库]-简易计算器(第一种)

简易计算器(效果如图所示) 第一种方案:采用Javascript+html完成计算器,支持+-*/,结果显示不允许使用input输入域(可以考虑使用<span>) <html> <head> <title>简易计算器</title> <script language="javascript">//易错:不是"text/javascript" function doCal(){ //alert(d

Linux下实现秒级定时任务的两种方案(crontab 每秒运行)

第一种方案,当然是写一个后台运行的脚本一直循环,然后每次循环sleep一段时间. while true ;do command sleep XX //间隔秒数 done 第二种方案,使用crontab. 我们都知道crontab的粒度最小是到分钟,但是我们还是可以通过变通的方法做到隔多少秒运行一次. 以下方法将每20秒执行一次 crontab -e * * * * * /bin/date * * * * * sleep 20; /bin/date * * * * * sleep 40; /bin

Linux下实现秒级定时任务的两种方案

Linux下实现秒级定时任务的两种方案(Crontab 每秒运行): 第一种方案,当然是写一个后台运行的脚本一直循环,然后每次循环sleep一段时间. while true ;do command sleep XX //间隔秒数 done 第二种方案,使用crontab. 我们都知道crontab的粒度最小是到分钟,但是我们还是可以通过变通的方法做到隔多少秒运行一次. 以下方法将每20秒执行一次 crontab -e * * * * * /bin/date* * * * * sleep 20;

Android 验证码倒计时两种方案

使用 第一种方案:自定义控件 1.在布局中使用 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_w

应用系统数据对接几种方案

应用系统之间数据传输的几种方式 第一种方案:socket方式 Socket方式是最简单的交互方式.是典型才C/S交互模式.一台客户机,一台服务器.服务器提供服务,通过IP地址和端口进行服务访问.而客户机通过连接服务器指定的端口进行消息交互.其中传输协议可以是TCP/UDP 协议.而服务器和约定了请求报文格式和响应报文格式.如图一所示 目前我们常用的http调用,java远程调用,webservices 都是采用的这种方式,只不过不同的就是传输协议以及报文格式.这种方式的优点:1 易于编程,目前j