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




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

相关文章推荐

Android自定义控件—-RadioGroup实现APP首页底部Tab的切换

实现APP首页底部Tab的切换已经见过四五种方式了,先来看运行的效果图吧: 今天我们就用RadioGroup的方法来实现以下。 【开发环境】 物理机版本:win 7旗舰版(6...

安卓APP底部导航栏(有消息圆点指示器),实现fragment切换(eclipse)

本项目使用了相对布局和单选按钮实现了安卓app常见的底部导航栏(带有消息圆点指示器)。

iOS使用push隐藏子页面底部bottom TabBar

原文地址:http://blog.csdn.net/wuwo333/article/details/40860047 以下两种情况是我在开发过程中遇到的,一种是代码使用pushViewControl...

iOS使用push隐藏子页面底部bottom TabBar

以下两种情况是我在开发过程中遇到的,一种是代码使用pushViewController,另一种是storyboard直接使用push。之前也查阅了很多关于隐藏底部tabbar的资料,但是要么使用起来麻...

一个带动画的页面底部的TabBar的实现

有时有这样一个需求,页面底部有几个图标可以点击,如果一个screenWidth显示不下这些图标,则这一列图标最后一个是more,点击more,可以通过动画展示两列图标 这样来加入layout中: ...

iOS开发——代码生成TabBar与视图切换详解

我在之前多篇博客中讲解了在不使用storyboard而使用nib文件的情况下,使用代码生成导航栏并进行跳转,具体可以参考《iOS开发——界面跳转与返回及视图类型详解》《iOS纯代码实现界面建立、跳转、...

页面布局之使用TabActivity实现底部Tabbar

使用TabHost 布局底部Tabbar,使用TabActivity实现Tabbar切换

iOS开发之模仿简书App自定义TabBar详解

iOS自定义TabBar
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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