Believe in your own future, will thank yourself right now Sinner Yun

Sinner_Yun

分栏控制器

 

 

 

分栏控制器UITabBarController


**********************************************************

//首先将导航控制器或视图控制器放到数组中controllerArr

//创建一个分栏控制器的实例对象
UITabBarController *tbc = [[UITabBarController alloc]init];
//将页面数组设置给分栏控制器
tbc.viewControllers = controllerArr;
//内容渲染色,和navigationbar的设置类似
tbc.tabBar.tintColor = [UIColor redColor];
//背景色
tbc.tabBar.barTintColor = [UIColor grayColor];
//背景图片
self.tabBar.backgroundImage = [UIImage imageNamed:@"tabbg"];
//将分栏控制器设为window的根控制器
self.window.rootViewController = tbc;


FiveViewController *fvc = [[FiveViewController alloc]init];
//弹出新页面时隐藏tabBar
fvc.hidesBottomBarWhenPushed = YES;
[self.navigationController pushViewController:fvc animated:YES];

 

**********************************************************

UITabBarItem分栏控制器专用按钮

//使用系统样式,自带图片和title
- (id)initWithTabBarSystemItem:(UITabBarSystemItem)systemItem tag:(NSInteger)tag;

//使用1张图片和文字
- (id)initWithTitle:(NSString *)title image:(UIImage *)image tag:(NSInteger)tag;

//使用2张图片和文字
- (instancetype)initWithTitle:(NSString *)title image:(UIImage *)image selectedImage:(UIImage *)selectedImage;

//item中的图片都是取形状然后进行渲染,如果不想渲染,而是想用图片本身的颜色,让图片调个方法

//返回值也是图片,并且这个图片不会被渲染,而是使用图片本身的颜色
//[[UIImage imageNamed:@"tab_0"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]


**********************************************************

自定义tabBar思路:

一、设置tbc(tabBarController)的viewControllers,

二、把一个包含button和label的视图放到tabBar上,

三、button的点击事件里处理变色以及设置tbc的selectedIndex

 

 

 

 


#import "MyTabBar.h"
#import "LoveViewController.h"
#import "NearViewController.h"
#import "ShareViewController.h"
#import "SetViewController.h"

@interface MyTabBar ()

@end

@implementation MyTabBar

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.

/*
* 创建tabBar基本流程
*
* 1,创建想要展示的页面
* 2,如果需要,将页面放到导航里
* 3,设置导航(页面)对应的显示在tabBar上的专用按钮
* 4,将导航(页面)放到数组里设置给tabBar
*
*/

LoveViewController *loveVC = [[LoveViewController alloc] init];
NearViewController *nearVC = [[NearViewController alloc] init];
ShareViewController *shareVC = [[ShareViewController alloc] init];
SetViewController *setVC = [[SetViewController alloc] init];

UINavigationController *loveNC = [[UINavigationController alloc] initWithRootViewController:loveVC];
UINavigationController *nearNC = [[UINavigationController alloc] initWithRootViewController:nearVC];

loveVC.navigationItem.title = @"最爱";
nearVC.navigationItem.title = @"附近";

//创建一个分栏上展示的专用按钮(用系统样式)
UITabBarItem *loveItem = [[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemFavorites tag:0];
//将专用按钮设置给对应的页面或者导航
loveNC.tabBarItem = loveItem;

//使用2张图片创建专用按钮(默认情况下只取形状,颜色会被渲染掉)
//给tabBarItem设置的图片最合适的大小是30*30
UITabBarItem *nearItem = [[UITabBarItem alloc] initWithTitle:@"near" image:[UIImage imageNamed:@"tab0_1"] selectedImage:[UIImage imageNamed:@"tab0_2"]];
nearNC.tabBarItem = nearItem;

//使用1张图片创建专用按钮
UITabBarItem *shareItem = [[UITabBarItem alloc] initWithTitle:@"share" image:[UIImage imageNamed:@"tab_0"] tag:0];
shareVC.tabBarItem = shareItem;

//使用2张图片创建,(使用原来的图片进行展示,不会被渲染)
UITabBarItem *setItem = [[UITabBarItem alloc] initWithTitle:@"set" image:[[UIImage imageNamed:@"tab_2"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] selectedImage:[[UIImage imageNamed:@"tab_c2"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
setVC.tabBarItem = setItem;

//设置专用按钮的字体
[setItem setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIFont systemFontOfSize:14], NSFontAttributeName, nil] forState:UIControlStateNormal];

//设置tabBar需要展示的页面或导航
self.viewControllers = [NSArray arrayWithObjects:loveNC, nearNC,shareVC, setVC, nil];

//通过分栏控制器找到标签栏,设置渲染色
self.tabBar.tintColor = [UIColor redColor];

//设置背景色
self.tabBar.barTintColor = [UIColor blackColor];

//背景图片(注意标签栏的高度是49)
self.tabBar.backgroundImage = [UIImage imageNamed:@"tabbg"];
}

 

 

 


#import "LoveViewController.h"
#import "DetailViewController.h"

@interface LoveViewController ()

@end

@implementation LoveViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
self.view.backgroundColor = [UIColor redColor];
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
DetailViewController *dvc = [[DetailViewController alloc] init];

//当二级页面被弹出的时候,隐藏底部的bar
dvc.hidesBottomBarWhenPushed = YES;

dvc.view.backgroundColor = [UIColor blueColor];

[self.navigationController pushViewController:dvc animated:YES];
}

 

 

 


#import "DetailViewController.h"

@interface DetailViewController ()

@end

@implementation DetailViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
self.view.backgroundColor = [UIColor cyanColor];
}

 

 

 

 

#import "NearViewController.h"

@interface NearViewController ()

@end

@implementation NearViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
self.view.backgroundColor = [UIColor orangeColor];
}

 

 

 


#import "ShareViewController.h"

@interface ShareViewController ()

@end

@implementation ShareViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
self.view.backgroundColor = [UIColor yellowColor];
}

 

 


#import "SetViewController.h"

@interface SetViewController ()

@end

@implementation SetViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
self.view.backgroundColor = [UIColor greenColor];
}

 


-----------------------------------------------------------------分割----------------------------------------------------------------

 

 

 

 

#import "MyTabBar.h"
#import "HomeViewController.h"
#import "LoveViewController.h"
#import "NearViewController.h"
#import "SetViewController.h"

@interface MyTabBar ()

@end

@implementation MyTabBar

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.

[self customVC];

[self customTabBar];
}

- (void)customVC
{//定义viewController
HomeViewController *homeVC = [[HomeViewController alloc] init];
LoveViewController *loveVC = [[LoveViewController alloc] init];
NearViewController *nearVC = [[NearViewController alloc] init];
SetViewController *setVC = [[SetViewController alloc] init];

UINavigationController *homeNC = [[UINavigationController alloc] initWithRootViewController:homeVC];
homeVC.navigationItem.title = @"主页";

self.viewControllers = [NSArray arrayWithObjects:homeNC, loveVC, nearVC, setVC, nil];
}

- (void)customTabBar
{//定义tabBar
//背景图片
UIImageView *bgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 49)];
bgView.image = [UIImage imageNamed:@"tab_bg"];
bgView.userInteractionEnabled = YES;
[self.tabBar addSubview:bgView];

NSArray *titleArr = [NSArray arrayWithObjects:@"首页", @"最爱", @"附近", @"设置", nil];
for (int i = 0; i<4; i++) {
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.frame = CGRectMake(25+i*80, 3, 30, 30);
[btn setBackgroundImage:[UIImage imageNamed:[NSString stringWithFormat:@"tab_%d",i]] forState:UIControlStateNormal];
[btn setBackgroundImage:[UIImage imageNamed:[NSString stringWithFormat:@"tab_c%d",i]] forState:UIControlStateSelected];
btn.tag = 1000+i;
[btn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
[bgView addSubview:btn];

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(-5, 33, 40, 12)];
label.font = [UIFont systemFontOfSize:10];
label.textColor = [UIColor grayColor];
label.textAlignment = NSTextAlignmentCenter;
label.text = [titleArr objectAtIndex:i];
[btn addSubview:label];

if (!i) {
btn.selected = YES;
label.textColor = [UIColor orangeColor];
}
}
}

- (void)btnClick:(UIButton *)sender
{
for (int i = 0; i<4; i++) {
UIButton *btn = (UIButton *)[self.tabBar viewWithTag:1000+i];
btn.selected = NO;
UILabel *label = [[btn subviews] lastObject];
label.textColor = [UIColor grayColor];
}

sender.selected = YES;
UILabel *label = [[sender subviews] lastObject];
label.textColor = [UIColor orangeColor];

//展示tabBarController里的页面(通过下标)
self.selectedIndex = sender.tag - 1000;
}

 

 

 

 

#import "HomeViewController.h"
#import "SetViewController.h"

@interface HomeViewController ()

@end

@implementation HomeViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
self.view.backgroundColor = [UIColor redColor];
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
SetViewController *svc = [[SetViewController alloc] init];
svc.hidesBottomBarWhenPushed = YES;
svc.view.backgroundColor = [UIColor cyanColor];
[self.navigationController pushViewController:svc animated:YES];
}

 

 

 

 

#import "LoveViewController.h"

@interface LoveViewController ()

@end

@implementation LoveViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
self.view.backgroundColor = [UIColor orangeColor];
}

 

 

 

 


#import "NearViewController.h"

@interface NearViewController ()

@end

@implementation NearViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
self.view.backgroundColor = [UIColor yellowColor];
}

 

 

 

 

 


#import "SetViewController.h"

@interface SetViewController ()

@end

@implementation SetViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
self.view.backgroundColor = [UIColor greenColor];
}

 

posted on 2014-03-24 20:18  Sinner_Yun  阅读(236)  评论(0编辑  收藏  举报

导航