ios开发-UI-自定义Tabbar 图书布局

#import "ViewController.h"
#import "CGTabbar.h"
#import "QHCListView.h"
#import "QHJavaListView.h"
#import "QHOCListView.h"




@interface ViewController ()<CGTabbarDelegate>
@property(nonatomic,strong)NSArray *books;
@property(nonatomic,weak)QHOCListView *ocListView;
@property(nonatomic,weak)QHJavaListView *javaListView;
@property(nonatomic,weak)QHCListView *cListView;


@end

@implementation ViewController

-(QHOCListView *)ocListView
{
    if (_ocListView == nil) {
        QHOCListView *ocListView = [QHOCListView ocListView];
        [self.view addSubview:ocListView];
        _ocListView = ocListView;
    }
    return _ocListView;
}

-(QHJavaListView *)javaListView
{
    if (_javaListView == nil) {
        QHJavaListView *javaListView = [QHJavaListView javaListView];
        [self.view addSubview:javaListView];
        _javaListView = javaListView;
        NSLog(@"+++++++++++");
    }
    return _javaListView;
}

-(QHCListView *)cListView
{
    if (_cListView == nil) {
        QHCListView *cListView = [QHCListView cListView]
        ;
        [self.view addSubview:cListView];
        _cListView = cListView;
    }
    return _cListView;
}
- (void)viewDidLoad {
    [super viewDidLoad];
    
    NSString *path = [[NSBundle mainBundle]pathForResource:@"books.plist" ofType:nil];
    _books = [NSArray arrayWithContentsOfFile:path];
    
    //NSLog(@"%@",_books);
    CGTabbar *tabbar = [CGTabbar tabbar];
    [self.view addSubview:tabbar];
    
    UIButton *btn1 = [UIButton buttonWithType:UIButtonTypeCustom];
    UIButton *btn2 = [UIButton buttonWithType:UIButtonTypeCustom];
    UIButton *btn3 = [UIButton buttonWithType:UIButtonTypeCustom];
    
    [self configButton:btn1 andTitile:@"OC" andImageName:@"upomp_button_keyboard3" andSelectedImageName:@"upomp_button_keyboard3_highlighted"];
    [self configButton:btn2 andTitile:@"Java" andImageName:@"upomp_button_keyboard3" andSelectedImageName:@"upomp_button_keyboard3_highlighted"];
    [self configButton:btn3 andTitile:@"C" andImageName:@"upomp_button_keyboard3" andSelectedImageName:@"upomp_button_keyboard3_highlighted"];
    tabbar.delegate = self;
    tabbar.items = @[btn1,btn2,btn3];
     NSLog(@"%@",_books);
    // Do any additional setup after loading the view, typically from a nib.
}

-(void)configButton:(UIButton *)btn andTitile:(NSString *)title andImageName:(NSString *)imageName andSelectedImageName:(NSString *)selectedImageName
{
    [btn setTitle:title forState:UIControlStateNormal];
    [btn setBackgroundImage:[UIImage imageNamed:imageName] forState:UIControlStateNormal];
    [btn setBackgroundImage:[UIImage imageNamed:selectedImageName] forState:UIControlStateSelected];
}
-(void)tabbarItemSelected:(CGTabbar *)tabbar andItem:(UIButton *)item andIndex:(NSInteger)index
{
    
    if (index==0) {
        [self.view bringSubviewToFront:self.ocListView];
        NSLog(@"--------------");
    }
    else if(index ==1)
    {
        [self.view bringSubviewToFront:self.javaListView];
    }
    else if(index ==2)
    {
        [self.view bringSubviewToFront:self.cListView];
    }
    
    [self.view bringSubviewToFront:tabbar];
}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

#import <UIKit/UIKit.h>

@interface QHOCListView : UIView
+(id)ocListView;
@property(nonatomic,strong)NSArray *books;
@end

#import "QHOCListView.h"

@implementation QHOCListView
+(id)ocListView
{
    return [[self alloc]init];
}

-(void)willMoveToSuperview:(UIView *)newSuperview
{
    NSString *path = [[NSBundle mainBundle]pathForResource:@"books.plist" ofType:nil];
    _books = [NSArray arrayWithContentsOfFile:path];
    
    NSLog(@"%@",_books);
    
    self.frame = newSuperview.bounds;
    self.backgroundColor = [UIColor redColor];
    int totalColumns = 3;
    
    // 应用的尺寸
    CGFloat bookW = 90;
    CGFloat bookH = 125;
    
    // 间隙 = (view的宽度 - 3 * 应用宽度) / 4
    CGFloat marginX = (self.frame.size.width - totalColumns * bookW) / (totalColumns + 1);
    CGFloat marginY = 15;
    
    // 根据应用个数创建对应的框(index)
    for (int index = 0; index<self.books.count; index++) {
        // 创建
        UIView *bookView = [[UIView alloc] init];
        // 设置背景色
        bookView.backgroundColor = [UIColor cyanColor];
        
        // 计算框的位置
        // 计算行号和列号
        int row = index / totalColumns;
        int col = index % totalColumns;
        // 计算x和y
        CGFloat bookX = marginX + col * (bookW + marginX);
        CGFloat bookY = 20 + row * (bookH + marginY);
        // 设置frame
        bookView.frame = CGRectMake(bookX, bookY, bookW, bookH);
        
        //添加框到控制器的view
        [self addSubview:bookView];
        
        // 添加控件
        // index位置对应的应用信息
        NSDictionary *bookInfo = self.books[index];
        
        // 添加图片
        //UIImageView *iconView = [[UIImageView alloc] init];
        UIButton * btn = [UIButton buttonWithType:UIButtonTypeCustom];
        [btn setBackgroundImage:[UIImage imageNamed:bookInfo[@"icon"]] forState:UIControlStateNormal];
        // 设置位置
        CGFloat iconW = 60;
        CGFloat iconH = 80;
        CGFloat iconX = (bookW - iconW) * 0.5;
        CGFloat iconY = 0;
        btn.frame = CGRectMake(iconX, iconY, iconW, iconH);
        [bookView addSubview:btn];
        
        // 添加名字
        UILabel *nameLabel = [[UILabel alloc] init];
        // 设置位置
        CGFloat nameW = bookW;
        CGFloat nameH = 20;
        CGFloat nameX = 0;
        CGFloat nameY = iconY + iconH;
        nameLabel.frame = CGRectMake(nameX, nameY, nameW, nameH);
        // 设置文字
        nameLabel.text = bookInfo[@"name"];
        // 设置字体
        nameLabel.font = [UIFont systemFontOfSize:13];
    
        // 设置文字居中对齐
        nameLabel.textAlignment = NSTextAlignmentCenter;
        [bookView addSubview:nameLabel];
        
        // 添加下载按钮
        UIButton *downloadBtn = [[UIButton alloc] init];
        // 设置位置
        CGFloat downloadX = 12;
        CGFloat downloadY = nameY + nameH;
        CGFloat downloadW = bookW - 2 * downloadX;
        CGFloat downloadH = 20;
        downloadBtn.frame = CGRectMake(downloadX, downloadY, downloadW, downloadH);
        // 设置默认的背景
        
        UIImage *normalImage = [UIImage imageNamed:@"upomp_button_keyboard3"];
        [downloadBtn setBackgroundImage:normalImage forState:UIControlStateNormal];
        // 设置高亮的背景
        UIImage *highImage = [UIImage imageNamed:@"upomp_button_keyboard3_highlighted"];
        [downloadBtn setBackgroundImage:highImage forState:UIControlStateHighlighted];
        // 设置按钮的文字
        [downloadBtn setTitle:@"download" forState:UIControlStateNormal];
       
        // 设置按钮文字的字体
        
        downloadBtn.titleLabel.font = [UIFont systemFontOfSize:13];
        [bookView addSubview:downloadBtn];
    }
    
    

}
@end

#import <UIKit/UIKit.h>

@class CGTabbar;

@protocol CGTabbarDelegate <NSObject>

-(void)tabbarItemSelected:(CGTabbar *)tabbar andItem:(UIButton *)item andIndex:(NSInteger)index;

@end


@interface CGTabbar : UIView
@property(nonatomic,strong)NSArray *items;
@property(nonatomic,assign)id<CGTabbarDelegate>delegate;
+(id)tabbar;
@end

#import "CGTabbar.h"

@implementation CGTabbar

+(id)tabbar
{
    return [[self alloc]init];
}

-(id)initWithFrame:(CGRect)frame
{
    if (self =[super initWithFrame:frame]) {
        
    }
    return self;
}
-(void)btnTouch:(UIButton *)btn
{
    if (btn.selected) return;
    for(UIButton *tmp in self.items)
    {
        tmp.selected = NO;
    }
    btn.selected  = YES;
    [_delegate tabbarItemSelected:self andItem:btn andIndex:btn.tag];
}

-(void)setItems:(NSArray *)items
{
    _items  =items;
    CGFloat btnW = self.frame.size.width/items.count;
    for (int i = 0; i < items.count; i++) {
        UIButton *btn = items[i];
        [self addSubview:btn];
        CGFloat btnX = i*btnW;
        CGFloat btnY = 0;
        CGFloat btnH = self.frame.size.height;
        btn.frame = CGRectMake(btnX, btnY, btnW, btnH);
        [btn addTarget:self action:@selector(btnTouch:) forControlEvents:UIControlEventTouchUpInside];
        btn.tag = i;
        [self btnTouch:items[0]];
    }
}
-(void)willMoveToSuperview:(UIView *)newSuperview
{
    CGFloat selfW = newSuperview.bounds.size.width;
    CGFloat selfH = 49;
    CGFloat selfX = 0;
    CGFloat selfY = newSuperview.bounds.size.height-selfH;
    
    self.frame = CGRectMake(selfX, selfY, selfW, selfH);
    self.backgroundColor = [UIColor grayColor];
}





@end

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值