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

来源:互联网 发布:米那斯提力斯 知乎 编辑:程序博客网 时间:2024/05/22 14:08

上一篇讲述了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 *TabBarIteminself.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




0 0
原创粉丝点击