自定义TabBar-IOS学习

  UITabBarController是在IOS应用开发中很常用的一个类,继承于UIViewController,来实现多个视图间的切换,但很多时候系统自带的TabBar不能满足我们的需求,系统自带的一些属性我们往往无法修改,像切换项的图片的大小,这时候就需要我们自定义TabBar。例如,我们想实现下方的TabBar的这个效果,使用系统的就无法完成。

演示所需图片下载地址http://download.csdn.net/detail/zsmile123/8136531

------------------------------------------------------下面演示过程-----------------------------------------------

首先,新建一个继承于UIViewController得视图控制器,随便起名为CustomTarBarViewController,勾选上xib。我们首先来布局一下TabBar,也就是模仿系统的TabBar

-----------------------------依次拖放view,imageView,以及5个button,并给5个button设置tag值为1,2,3,4,5------------------------------------------------

----------------------------------------------------------------------------------------------------

----------------------------------------CustomTarBarViewController.h文件中--------------------------------------------

#import <UIKit/UIKit.h>

@interface CustomTarBarViewController : UIViewController<UINavigationControllerDelegate>

{

//正常状态下的图片数组

NSArray *_nomalImageArray;

//高亮状态下的图片数组

NSArray *_hightlightedImageArray;

}

//添加两个属性,selectedIndex用来记录选中的是那一个视图(或button),viewControllers数组用来存放button点击对应的视图控制器

@property (nonatomic ,assign)NSInteger selectedIndex;

@property (nonatomic ,retain)NSArray *viewControllers;

//将xib中的view,和5个button连线

@property (retain, nonatomic) IBOutlet UIView *tabBarView;    

- (IBAction)tabBarButtonClick:(UIButton *)sender;

@end

-----------------------------------------------------------CustomTarBarViewController.m文件中------------------------------------

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

{

self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

if (self) {

  //这里是为了每次首次进入都能加载第一个视图

_selectedIndex = -1;

}

return self;

}

- (void)viewDidLoad

{

[super viewDidLoad];

self.view.backgroundColor = [UIColor redColor];

//正常状态下按钮图片

_nomalImageArray = [[NSArray alloc] initWithObjects:@"tabbar_button_binders_normal.png",@"tabbar_button_updates_normal.png",@"tabbar_button_centeradd.png",@"tabbar_button_sessions_normal.png",@"tabbar_button_notes_normal.png",nil];

  //高亮状态下按钮图片

  _hightlightedImageArray = [[NSArray alloc]initWithObjects:@"tabbar_button_binders_selected.png",@"tabbar_button_updates_selected.png",@"tabbar_button_centeradd.png",@"tabbar_button_sessions_selected.png",@"tabbar_button_notes_selected.png",nil];

if (_selectedIndex == -1)

{

self.selectedIndex = 0 ;

}

}

#pragma mark ----切换视图选项

- (IBAction)tabBarButtonClick:(UIButton *)sender

{

//当前选中的button  self.selectedIndex会调用set方法,button的tag值-1即为其对应的视图

self.selectedIndex = sender.tag - 1;

}

#pragma mark ----重写selectedIndex属性的set方法

- (void)setSelectedIndex:(NSInteger)aselectedIndex

{

//判断新的值与原来的值是否相等,相等则选择的任然是当前视图,不做处理

if (aselectedIndex == _selectedIndex)

{

return;

}

//_selectedIndex >=0说明选中了某一按钮

if (_selectedIndex >= 0)

{

//需要将前一个视图移除

//根据_selectedIndex从视图控制器数组中取出先前选中的视图

UIViewController *previousViewController = [_viewControllers objectAtIndex:_selectedIndex ];

[previousViewController.view removeFromSuperview];

//需要将前一个button的图片改为普通状态的图片

UIButton *previousButton = (UIButton *)[self.view viewWithTag:_selectedIndex+1];

[previousButton setBackgroundImage:[UIImage imageNamed:[_nomalImageArray objectAtIndex:_selectedIndex]] forState:(UIControlStateNormal)];

}

//然后将新的aselectedIndex赋值给_selectedIndex

_selectedIndex = aselectedIndex;

//显示新的视图

UIViewController *currentViewController = [_viewControllers objectAtIndex:_selectedIndex];

//找到当前button,将其背景图片改为高亮

UIButton *currentButton = (UIButton *)[self.view viewWithTag:_selectedIndex + 1];

[currentButton setBackgroundImage:[UIImage imageNamed:[_hightlightedImageArray objectAtIndex:_selectedIndex]] forState:(UIControlStateNormal)];

//由于第一个视图是加在导航中的,所以需要判断

if ([currentViewController isKindOfClass:[UINavigationController class]])

{

//表示这个视图是navgationController

//设置导航的代理

((UINavigationController *)currentViewController).delegate = self;

}

//设置当前视图的大小

currentViewController.view.frame = CGRectMake(0, 0, 320, self.view.bounds.size.height-44);

//添加到tab的view上

[self.view addSubview:currentViewController.view];

[self.view sendSubviewToBack:currentViewController.view];

}

@end

--------------------------------------AppDelegate.h文件中给TabBar添加视图------------------------------------------------

#import "AppDelegate.h"

#import "CustomTarBarViewController.h"

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

self.window.backgroundColor = [UIColor whiteColor];

[self.window makeKeyAndVisible];

//这里给第一个视图添加了导航,也可不添加(这里演示导航的添加)

UIViewController *homeVC = [[UIViewController alloc] init] ;

  homeVC.view.backgroundColor = [UIColor redColor];

UINavigationController *nav = [[[UINavigationController alloc] initWithRootViewController:homeVC] autorelease];

UIViewController *setVC = [[UIViewController alloc] init] ;

  setVC.view.backgroundColor = [UIColor blueColor];

UIViewController *shareVC = [[UIViewController alloc] init] ;

  shareVC.view.backgroundColor = [UIColor yellowColor];

UIViewController *plusVC = [[UIViewController alloc] init] ;

  plusVC.view.backgroundColor = [UIColor greenColor];

UIViewController *playVC = [[UIViewController alloc] init];

  playVC.view.backgroundColor = [UIColor orangeColor];

CustomTarBarViewController *tabVC = [[CustomTarBarViewController alloc] init] ;

  //将视图加到tabVC中

tabVC.viewControllers = [NSArray arrayWithObjects:nav,setVC,shareVC,plusVC,playVC, nil];

self.window.rootViewController = tabVC;

return YES;

}

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

自定义TabBar-IOS学习的相关文章

自定义Tabbar #iOS

我们在做项目的过程中,会经常需要自定义tabbar.我今天刚好整理了一下,把自己的想法写出来和大家分享一下.自定义Tabbar 首先我们新建一个继承于UITabBar的子类EzTabBar  EzTabBar.h文件内容 import “EzTabBar.h” #define TABBAR_INSET 12 @implementation EzTabBar -(void)initialize { UIImageView * barv = [[UIImageView alloc]init]; se

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

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

iOS自定义tabbar后popToRootViewContriller和poptoviewcontroller时出现两个tabbar 的解决办法

iOS自定义tabbar后popToRootViewContriller和poptoviewcontroller时出现两个tabbar  的解决办法 问题:iOS自定义tabbar后popToRootViewContriller和poptoviewcontroller时出现两个tabbar 1.自定义代码: - (void)viewWillAppear:(BOOL)animated { [super  viewWillAppear:animated]; // 删除系统自动生成的UITabBarB

Android UI之自定义——类似iOS的Tabbar

Android UI之自定义--类似iOS的Tabbar Tabbar最早出现在iOS,iOS中的TabBarController实现了这个功能,开发起来相当简单.现在的APP,大多数都会使用Tabbar来作为应用的功能导航,界面简单清晰.那么Android常见的实现是通过RadioGroup来实现,今天将带来自定义实现,补充RadioGroup实现的不足. 先看看常见的软件中的使用: 这个是高铁管家APP,大家应该非常熟悉.这个APP的首页底部就是一个类似iOS的Tabbar.这里就不多举例子

ios中解决自定义tabbar跳转隐藏问题的方法

在ios开发(http://www.maiziedu.com/course/ios/)中,如何自定义tabbar高度的跳转隐藏问题,比如和系统自带的tabbar高度不一样导致的有一条线的问题,还有push时动画效果等等一些列问题不在这里累述了,当然,思路有很多,可以参考以上链接自己琢磨琢磨,好了,下面直接上个人认为完美解决办法. 需求 1.自定义tabbar,不用系统的tabbar 2.第二点需求是自定义tabbar的高度和系统的不一样,系统的tabbar高度为49,就是因为这点导致第三个需求有

IOS开发-关于自定义TabBar条

今天在做项目的时候,突然有一个模块需要自定义TabBar条. 在平常很多做项目的时候,都没有去自定义过,大部分都是使用系统自带的.今天整理一个自定义TabBar条的步骤. 首先看下我们最终实现的效果: 首先需要继承UItabBar自定义一个自己的tabBar .h #import <UIKit/UIKit.h> @class THTabBar; @protocol THTabBarDelegate <UITabBarDelegate> @optional - (void)tabBa

iOS开发之功能模块--关于自定义TabBar条

只上项目中用到的代码: 1.实现重写TabBar的TabBarItem,然后在中间额外加一个按钮. 1 #import <UIKit/UIKit.h> 2 3 @interface BikeTabBar : UITabBar 4 5 @end 1 #import "BikeTabBar.h" 2 3 @interface BikeTabBar () 4 5 //@property (nonatomic,weak)UIButton *centerButton; 6 7 @en

IOS第二天-新浪微博 - 添加搜索框,弹出下拉菜单 ,代理的使用 ,HWTabBar.h(自定义TabBar)

********HWDiscoverViewController.m(发现) - (void)viewDidLoad { [super viewDidLoad]; // 创建搜索框对象 HWSearchBar *searchBar = [HWSearchBar searchBar]; searchBar.width = 300; searchBar.height = 30; self.navigationItem.titleView = searchBar; //设置titleView 是搜索框

猫猫学iOS(四十三)之网易彩票底部自定义TabBar实现切换

猫猫分享,必须精品 原创文章,欢迎转载.转载请注明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243?viewmode=contents 效果: 代码: NYTabBarController // // NYTabBarController.m // 彩票lottery // // Created by apple on 15-5-9. // Copyright (c) 2015年 znycat. All rights reserved. // #import

iOS 自定义tabbar 关于push问题 小技巧

在开发的时候,相信大家都用过tabbar ,今天我在写项目的时候也用到了tabbar  紧着着一系列问题就来了 需求:我的项目的主要框架是tabbar ,但是用系统的tabbar不美观 于是我就自定义了我的tabbar,创建了一个类,继承自UITabBarController,在这个类中我将系统原生的tabbar隐藏了,就写了这样一句话, self.tabBar.hidden=YES; 然后就是一系列的我们写得不能在熟的代码了,引入viewcontroller的头文件,然后实例化,将viewco