iOS(三)实现App底部TabBar的切换:二

原创 2015年11月19日 19:38:31

上一篇讲述了iOS自带的TabBar,但在我所见到的很多App源码中大多用了自己写的TabBar,惯例先上图:

                   

这只是一个最简单的TabBar,但重在原理,虽然是我懒。。。。


HomeViewController.h
HomeViewController.m

ClassViewController.h
ClassViewController.m

PrivateViewController.h
PrivateViewController.m
这六个文件详情见上一篇

添加自定义的TabBar文件

ItemView.h

#import <UIKit/UIKit.h>

//用来定义tabbar按钮大小位置,图片,被选中时的颜色

@interface ItemView :UIControl

{

    UIImageView *Itemimageview;

    UILabel *Itemlabel;

}


-(void)setItemImage:(UIImage *)image forState:(UIControlState)state;//某种状态下的图片

-(void)setItemTitle:(NSString *)title;//tabbar按钮下的文字

-(void)setItemSelected:(BOOL)isSelected;//当定义的按钮被点击时,告诉被选中了

@end


ItemView.m

#import "ItemView.h"

@implementation ItemView

-(instancetype)initWithFrame:(CGRect)frame{

    self=[superinitWithFrame:frame];

    if (self) {

        CGFloat itemHeight=CGRectGetHeight(frame);

        CGFloat itemWidth =CGRectGetWidth(frame);

        Itemimageview=[[UIImageViewalloc]initWithFrame:CGRectMake((itemWidth-22)/2,10.f, 22.f,20.f)];

        Itemimageview.contentMode=UIViewContentModeScaleAspectFit;

        [self addSubview:Itemimageview];

        //定义iamgeView的位值大小,以及图片contentMode属性

        

        Itemlabel=[[UILabelalloc]initWithFrame:CGRectMake(0.f, itemHeight-20.f

   itemWidth, 20.f)];

        Itemlabel.textAlignment=NSTextAlignmentCenter;//字体居中

        Itemlabel.backgroundColor=[UIColorclearColor];

        Itemlabel.font=[UIFontboldSystemFontOfSize:9.f];

        Itemlabel.highlightedTextColor=[UIColorblackColor];

        Itemlabel.textColor=[UIColorcolorWithRed:254.f/255.f 

     green:87.f/255.f 

     blue:178.f/255.f 

     alpha:1];

        [self addSubview:Itemlabel];

    }

    returnself;

}


-(void)setItemImage:(UIImage *)image forState:(UIControlState)state{

    if (state==UIControlStateNormal) {

        Itemimageview.image=image;

    } elseif(state==UIControlStateSelected){

        Itemimageview.highlightedImage=image;

    }

}


-(void)setItemTitle:(NSString *)title{

    Itemlabel.text=title;

}


-(void)setItemSelected:(BOOL)isSelected{

    Itemimageview.highlighted=isSelected;

    Itemlabel.highlighted=isSelected;

}

@end


接着修改

ViewController.h

#import <UIKit/UIKit.h>

@interface ViewController :UITabBarController

@end


ViewController.m

#import "ViewController.h"

#import "PrivateViewController.h"

#import "ClassViewController.h"

#import "HomeViewController.h"

#import "ItemView.h"

@interfaceViewController ()

{

    ItemView *select_TabItem;

}

@end


@implementation ViewController

- (void)viewDidLoad {

    [superviewDidLoad];

    [selfcreateViewControllers];//创建多个视图

    [selfcreateTabBarItem];//创建TabBar

    // Do any additional setup after loading the view, typically from a nib.

}

-(void)createViewControllers{

    ClassViewController *ClassVC=[[ClassViewControlleralloc]init];

    PrivateViewController *PrivateVC=[[PrivateViewControlleralloc]init];

    HomeViewController *HomeVC=[[HomeViewControlleralloc]init];   

    NSArray *VCarray=@[HomeVC,ClassVC,PrivateVC];

    NSMutableArray *UINavi=[[NSMutableArrayalloc]initWithCapacity:3];

    

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

        UINavigationController *navi=[[UINavigationControlleralloc]

initWithRootViewController:VCarray[i]];

        [UINavi addObject:navi];

    }

    self.viewControllers=UINavi;

}

- (void)TabBarclick:(ItemView *)sender {

    if (select_TabItem != sender) {

        [select_TabItemsetItemSelected:NO];//之前的TabBar变为普通状态

        [sender setItemSelected:YES];//被点击的TabBar变为选中状态

        select_TabItem = sender;

       self.selectedIndex = sender.tag;

//TabBarController的selectedIndex就是用来确定进入到哪个视图,之前总共赋予了三个VC,所以selectedIndex就有0,1,2三个值

    }

}

- (void)createTabBarItem{

    for(UIView *TabBarItemin self.tabBar.subviews){

        [TabBarItem removeFromSuperview];

    }//移除原有的TabBarItem


    CGFloat itemWidth=self.view.frame.size.width/self.viewControllers.count;

    NSArray *titlearray=@[@"首页",@"分类",@"个人"];

    NSArray *imagearray=@[@"home",@"classify",@"person"];

    NSArray *imagearray_select=@[@"home_s",@"classify_s",@"person_s"];

    

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

        ItemView *TabItem=[[ItemViewalloc]initWithFrame:CGRectMake(itemWidth*i,0, itemWidth, self.tabBar.frame.size.height)];

        [TabItem addTarget:selfaction:@selector(TabBarclick:)forControlEvents:UIControlEventTouchUpInside];

//给TabBar添加点击的操作

        TabItem.tag=i;

        [TabItem setItemImage:[UIImageimageNamed:imagearray[i]] forState:UIControlStateNormal];

//给TabBar添加普通情况的图片

        [TabItem setItemImage:[UIImageimageNamed:imagearray_select[i]] forState:UIControlStateSelected];

//给TabBar添加被选中时的图片

        [TabItem setItemTitle:titlearray[i]];

//给每个TabBar添加文字

        [self.tabBaraddSubview:TabItem];

        if (i==0) {

            [TabItem setItemSelected:YES];

            select_TabItem=TabItem;

        }

//默认情况下,第一个被选中,所以设置成选中状态

    }

}

- (void)didReceiveMemoryWarning {

    [superdidReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}

@end



下一篇 自己写的动漫App http://blog.csdn.net/u012723810/article/details/50481050




版权声明:本文为博主原创文章,未经博主允许不得转载。

iOS(三)实现App底部TabBar的切换:一

先上图:                                  然后添加几个文件 HomeViewController.h #import @interface H...
  • u012723810
  • u012723810
  • 2015年11月18日 19:22
  • 339

ios 底部的4个tabBar回顾学习

一. 设置登陆页面为rootVC - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NS...
  • robinson_911
  • robinson_911
  • 2017年07月16日 22:29
  • 240

iOS隐藏导航条、tabbar 1px的底部横线

原文链接:http://blog.it985.com/9808.html 默认情况下会有这条线 第一种方法: 1 2 3 4 5 6 UINavigatio...
  • qimuya
  • qimuya
  • 2016年09月18日 10:07
  • 1330

iOS导航栏和底部tabbar的隐藏和背景色

我项目的主页常见的是UITabbarController + UINavigationController形式 屏幕快照 2016-07-17 下午7.54.45.png 因为导航栏是自定...
  • u012960049
  • u012960049
  • 2016年07月28日 17:21
  • 2866

隐藏TabBar后,UIWebView加载过程中和加载失败时,底部出现黑边的问题解决

描述 我的应用里同时使用了 TabBar 和 Navigation Bar,由于原本的 TabBar 不能满足我的外观效果要求,我用自定义的 view 实现了一个 TabBar 的外观,隐藏了原...
  • fangzhangsc2006
  • fangzhangsc2006
  • 2013年06月13日 16:17
  • 3339

自定义TabBar以及TabBar上的TabBarButton可以实现自动切换

快速的完成自定义TabBar 以及上面的 TabBarButton 按钮,并且可以实现自动切换控制器,可以增加部分做出如新浪微博,QQ空间等之类主流APP一样的效果!...
  • ZZ_IOSdeveloper
  • ZZ_IOSdeveloper
  • 2015年10月31日 10:21
  • 904

iOS开发——使用Navigation和TabBar构造App框架与界面栈的重构

对于iOS开发来说,Navigation和TabBar是最常用到的界面元素。我在前面几篇博客中《iOS开发——代码生成TabBar与视图切换详解》《iOS纯代码实现界面建立、跳转、导航栏(无story...
  • CHENYUFENG1991
  • CHENYUFENG1991
  • 2016年04月29日 12:46
  • 4291

Swift UI专项训练34 TabBar底部导航栏

TabBar大家应该不会陌生,也是我们经常接触的控件,与navigation类似。首先来看下它的属性: Background用来摄住TabBar的背景图片。 Shadow设置阴影。 Selec...
  • cg1991130
  • cg1991130
  • 2015年03月04日 20:28
  • 6933

自定义和隐藏(自定义TabBar)

一. 自定义TabBar1. 自定义概念:在长时间开发APP当中,我得出了一个结论,大多数系统的控件是无法满足我们的需求,此时我们就需要自己自定义控件.2. 自定义控件需要达到的效果图3. 自定义继承...
  • xf931456371
  • xf931456371
  • 2016年03月13日 00:58
  • 1439

ios学习笔记----实现一个带滑动手势的tabBarViewController,并可自定义tabBar

我又来啦····最近在准备实习,渣渣的工作路程就要开始啦啦啦啦···· 闲话少说,进入正题吧~····之前在做项目的时候很多时候用到tabBarViewController这个东西,ios uikit...
  • KeKeQiaoKeLi
  • KeKeQiaoKeLi
  • 2014年03月04日 21:39
  • 3058
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS(三)实现App底部TabBar的切换:二
举报原因:
原因补充:

(最多只允许输入30个字)