IOS之UITabBarController

  在学习IOS开发过程中,针对于UITabBarController的使用也不少出现,UITabBarController和UINavigationController类似,UITabBarController也可以轻松地管理多个控制器,轻松完成控制器之间的切换

  使用步骤:

1初始化UITabBarController

2设置UIWindow的rootViewController为UITabBarController

3创建相应的子控制器(viewcontroller)

4把子控制器添加到UITabBarController

  代码如下

//初始化视图控制器
    UIViewController * vc1=[[UIViewController alloc] init];
    vc1.view.backgroundColor=[UIColor redColor];

    UIViewController * vc2=[[UIViewController alloc] init];
    vc2.view.backgroundColor=[UIColor greenColor];

    UIViewController * vc3=[[UIViewController alloc] init];
    vc3.view.backgroundColor=[UIColor yellowColor];

    UIViewController * vc4=[[UIViewController alloc] init];
    vc4.view.backgroundColor=[UIColor orangeColor];

    UIViewController * vc5=[[UIViewController alloc] init];
    vc5.view.backgroundColor=[UIColor purpleColor];

    //为tabbarController添加控制器
    UITabBarController * tabVC=[[UITabBarController alloc] init];
    tabVC.delegate=self;
    tabVC.viewControllers=@[vc1,vc2,vc3,vc4,vc5 ];

    //初始化系统UITabBarItem
    UITabBarItem * item1=[[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemFavorites tag:101];
    vc1.tabBarItem=item1;

    UITabBarItem * item2=[[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemBookmarks tag:102];
    vc2.tabBarItem=item2;

    //初始化带图片的UITabBarItem
    UIImage * selImage=[UIImage imageNamed:@"tabbar_cate_f"];
    selImage=[selImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    UITabBarItem * item3=[[UITabBarItem alloc] initWithTitle:@"最近" image:[UIImage imageNamed:@"tabbar_cate"] selectedImage:selImage];
    NSDictionary * [email protected]{NSFontAttributeName:[UIFont systemFontOfSize:20],NSForegroundColorAttributeName:[UIColor redColor]};
    [item3 setTitleTextAttributes:dic forState:UIControlStateSelected];
    vc3.tabBarItem=item3;

    //初始化带图片的UITabBarItem
    UITabBarItem * item4=[[UITabBarItem alloc] initWithTitle:@"你好" image:[UIImage imageNamed:@"tabbar_fov"] tag:104];
    vc4.tabBarItem=item4;

    UITabBarItem * item5=[[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemSearch tag:105];
    vc5.tabBarItem=item5;

    //将TabBarController设置为窗口的根控制器
self.window.rootViewController=tabVC;

2.UITabBar自己有一些方法是可以改变自身状态,但是对于UITabBarController自带的tabBar还是不能满足需求的,因此们需要用到自定义

  思路如下: 我们需要自定义一个tabbar,这里我们用UIView来替代,同时我们需要在tabbar上面来增加Item,从而达到点击控制视图控制器的目的。Item涉及到点击事件因此我们可以考虑用Button来完成,同时在button上面添加图标和标题。

  1 我们自定义类JRTabBarController.h

  2 分别实现三个方法

代码如下

#pragma mark - loadVC
- (void) _loadVC{

    self.tabBar.hidden=YES;

    //1 创建视图控制器
    JRViewController * vc1=[[JRViewController alloc] init];

    UIViewController * vc2=[[UIViewController alloc] init];
    vc2.view.backgroundColor=[UIColor greenColor];

    UIViewController * vc3=[[UIViewController alloc] init];
    vc3.view.backgroundColor=[UIColor yellowColor];

    UIViewController * vc4=[[UIViewController alloc] init];
    vc4.view.backgroundColor=[UIColor blueColor];

    self.viewControllers=@[vc1,vc2,vc3,vc4];

}

#pragma mark - _makeTabBar
- (void)_makeTabBar{

    //1 >定制tabbar
    UIView * bgview=[[UIView alloc] initWithFrame:CGRectMake(0, kHeight-49, kWidth, 49)];
    bgview.backgroundColor=[UIColor colorWithRed:0 green:0 blue:0 alpha:0.5];
    [self.view addSubview:bgview];

    //2 >定制btn
    CGFloat space=(kWidth-2*kLeftSpace-5*kBtSize)/4.0+kBtSize;

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

        NSDictionary * dic=_array[i];
        //1 初始化button大小
        JRButton * button= [[JRButton alloc] initWithFrame:CGRectMake(kLeftSpace+i*space, 49/2.0-kBtSize/2.0, kBtSize, kBtSize)];

        //2 初始化button的标题和图片
        [button initButtonWithTitle:dic[@"title"] andImage:dic[@"image"]];

        //3 为button 设置tag 和代理
        button.tag=i;
        button.delegate=self;
        [bgview addSubview:button];

        //4 将button 加入到数组,来调整选中背景的位置
        [_btArray addObject:button];

    }

    //3 >增加选中图标
    _selectView=[[UIImageView alloc] initWithFrame:CGRectMake(10, 49/2.0-(kBtSize+2)/2.0, kBtSize+4, kBtSize+4)];
    UIButton * button=_btArray[0];
    _selectView.center=button.center;
    _selectView.image=[UIImage imageNamed:@"bg"];
    [bgview addSubview:_selectView];
    [bgview sendSubviewToBack:_selectView];

}

#pragma mark - 加载数据
- (void) _loadData{

    _btArray=[NSMutableArray array];

    NSDictionary * [email protected]{@"title":@"电影",@"image":[UIImage imageNamed:@"movie_cinema"]};
    NSDictionary * [email protected]{@"title":@"新闻",@"image":[UIImage imageNamed:@"msg_new"]};
    NSDictionary * [email protected]{@"title":@"top",@"image":[UIImage imageNamed:@"star_top250"]};
    NSDictionary * [email protected]{@"title":@"影院",@"image":[UIImage imageNamed:@"icon_cinema"]};
    NSDictionary * [email protected]{@"title":@"更多",@"image":[UIImage imageNamed:@"more_select_setting"]};

    _array=@[dic1,dic2,dic3,dic4,dic5];

}

  2、这里还有一个需要完成的功能就是点击事件,当每个Item被点击的时候我们需要进行视图控制器的切换,在切换视图控制器的同时我们还需要控制黑色背景小图片的移动,下面我们来实现这个方法

#pragma mark - ButtonDelegate
- (void)changePage:(NSInteger)index{

    //1 改变选中图片
    UIButton * button=_btArray[index];
    [UIView beginAnimations:nil context:nil];
    _selectView.center=button.center;
    [UIView commitAnimations];

    //2 切换视图控制器
    self.selectedIndex=index;
}

3 、Item的定义,这里我们自定义一个button用来自定义Item,分别在button上面增加图片和标题来达到我们的效果,同时,通过代理实现控件的控制,代码如下:

/**
 *  初始化图片和标题
 *
 *  @param title 标题
 *  @param image 图片
 */
- (void) initButtonWithTitle:(NSString *) title andImage:(UIImage *) image{

    if(self) {
       //1> 添加Image
        UIImageView * imageView=[[UIImageView alloc] initWithFrame:CGRectMake(self.frame.size.width/2.0-kImageSize/2.0, 2, kImageSize, kImageSize)];
        imageView.contentMode=UIViewContentModeScaleAspectFit;
        imageView.image=image;
        [self addSubview:imageView];

       //2> 添加title
        UILabel * label=[[UILabel alloc] initWithFrame:CGRectMake(0, kImageSize, self.frame.size.width, self.frame.size.height-kImageSize)];
        label.text=title;
        label.textColor=[UIColor whiteColor];
        label.textAlignment=NSTextAlignmentCenter;
        label.font=[UIFont boldSystemFontOfSize:13];
        [self addSubview:label];
        [self addTarget:self action:@selector(showClick) forControlEvents:UIControlEventTouchUpInside];

    }

}

作者:杰瑞教育
出处:http://www.cnblogs.com/jerehedu/ 
版权声明:本文版权归烟台杰瑞教育科技有限公司和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

技术咨询:

时间: 2024-12-11 03:52:22

IOS之UITabBarController的相关文章

iOS开发-UITabBarController详解

我们在开发中经常会使用到UITabBarController来布局App应用,使用UITabBarController可以使应用看起来更加的清晰,iOS系统的闹钟程序,ipod程序都是非常好的说明和Android的底部导航非常相似,最出名的这种布局莫过于微信.UITabBarController能适用于主线清晰,功能明确的情况,一目了然,这样App才能将想要展示的数据或者说自己公司的产品情怀更好的服务与用户,关于UITabBar的层次图,可以参考官网给出图片: 页面布局 讲解知识点最好的方法就是

IOS开发 UITabBarController

UITabBarController使用详解 UITabBarController是IOS中很常用的一个viewController,例如系统的闹钟程 序,ipod程序等.UITabBarController通常作为整个程序的rootViewController,而且不能添加到别的 container viewController中. 首先我们看一下它的view层级图: 一.手动创建UITabBarController 最常见的创建UITabBarController的地方就是在applicat

【iOS开发-UITabBarController】UITabBarController上面的UINavigationController的设置

自定义导航栏 为了保证项目的导航栏效果一直,一般都会设置导航栏的样式一样 ①自定义一个NavigationController类,继承与UINavigationController类 ②更改所有的UITabBarController下面的UINavigationController的class属性为自定义类形式 ③主要是取得导航栏的appearance对象,操作它就设置导航栏的主题 UINavigationBar *navBar = [UINavigationBar appearance]; ④

ios更改UITabBarController背景以及选中背景图片的方法

一.背景图片  1.5.0以上版本     UIImage *image = [UIImage imageNamed:@"system_tabbar_bg.png"];     [self.tabBar setBackgroundImage:image];  2.5.0以下版本     UIImage *image = [UIImage imageNamed:@"system_tabbar_bg.png"];     NSArray *array = [self.v

【IOS】IOS开发问题解决方法索引(一)

IOS开发问题解决方法索引(一) 1       Xcode工程调试时无法命中断点的问题 若没有勾选LLVM Compiler 1.6 –> CodeGeneration –> Generate Debug Symbols 一项,则程序调试时无法命中断点. 2       Xcode调试时查看变量的几种方法 Xcode如何查看内存中的数据 http://blog.csdn.net/evgd2288/article/details/8995779 Xcode的Debug中查看数据细节的方法 ht

iPad编程

1. iPad 现有型号: iPad Pro, iPad Air, iPad mini 均配备Retina显示屏.早期还有iPad 依次对应的坐标系及分辨率: iPad Pro 坐标系:1366 x 1024  分辨率:2732 x 2048 iPad Air  坐标系:1024 x 768    分辨率:2048 x 1536 iPad mini  坐标系:1024 x 768    分辨率:2048 x 1536 开发过程中图片可只设计2048 x 1536 分辨率下的.根据实际情况,也可选

iOS开发——实战OC篇&amp;环境搭建之StoryBoard(玩转UINavigationController与UITabBarController)

环境搭建之StoryBoard(玩转UINavigationController与UITabBarController) 研究了这么就IOS开发,都没有所处一个像样或者自己忙一点的项目.最近自己正打算开始着手做一个项目,可是不知道怎么下手,感觉前面学了好多,可是回头想想却又很难下手,其中最主要的就是第一步环境的搭建,当然在这之前还有选题和素材,但是那些对于ios开发来说都不是技术上的问题或者在以后公司里面一半都不是我们所考虑的.所以今天开始我将以三篇简短但又实用的文章给大家介绍一下,怎么搭建一个

iOS开发之UITabBarController和UICollectionView的使用

这一篇要记录的是iOS开发中UITabBarController控件和UICollectionView控件的使用.APP跑起来之后的效果例如以下图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >        watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQ

iOS开发——实战OC篇&amp;环境搭建之Xib(玩转UINavigationController与UITabBarController)

iOS开发——实战OC篇&环境搭建之Xib(玩转UINavigationController与UITabBarController) 前面我们介绍了StoryBoard这个新技术,和纯技术编程的代码创建界面,本篇我们将介绍一个老的技术,但是在很多的公司或者库里面还是使用这个技术,既然如此它肯定有他的好处,至于好处这里我就不一一介绍了.在Xcode5之前是只能使用Xib或者代码的,而代码又对于很多初学者来说算是一个难题.毕竟不知道怎么下手.所以我就总结了一下这段时间自己编写程序的一个实例来说明怎么