自定义标题栏

本文介绍了一个名为FootBar的底部导航栏组件的实现细节,包括如何设置数据源、自定义样式及响应点击事件等关键功能。此组件适用于iOS应用开发中常见的底部导航场景。

主要类
FootBar.h

#import <UIKit/UIKit.h>
#import "FootBarItem.h"
@interface FootBar : UIScrollView

-(void) setDataScoure:(NSArray *)footBarItems withTitleNortalColor:(UIColor *)nortalColor withTitleSelectColor:(UIColor *)selectColor;
-(void) selectPosition:(int) position;
@end

FootBar.m

//
//  FootBar.m
//  TyApp
//
//  Created by TY-DENG on 17/5/16.
//  Copyright © 2017年 Lin. All rights reserved.
//

#import "FootBar.h"
#import "FootBarItem.h"

@implementation FootBar
{
    NSArray *dataScoure;
    UIColor *titleSelectColor;
    UIColor *titleNortalColor;
    int oldSelectPosition;
}

-(void) setDataScoure:(NSArray *)footBarItems withTitleNortalColor:(UIColor *)nortalColor withTitleSelectColor:(UIColor *)selectColor{
    dataScoure = footBarItems;
    titleSelectColor = selectColor;
    titleNortalColor = nortalColor;
    oldSelectPosition = -1;
    [self setView];

}

-(void) setView{
    int wid = self.frame.size.width/dataScoure.count;
    for (int i =0; i<dataScoure.count; i++) {
        FootBarItem *item = dataScoure[i];
        UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(wid*i, 0, wid, self.frame.size.height)];
        UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake((wid-18)/2, 4, 20, 20)];
        [button setTag:1000+i];
        [imageView setImage:[UIImage imageNamed:item.imageNortalName]];
        [imageView setTag:2000+i];
        [button addSubview:imageView];
        UILabel *title = [[UILabel alloc] initWithFrame:CGRectMake(0, 24, wid, 20)];
        [title setText:item.title];
        [title setFont:[UIFont systemFontOfSize:13]];
        [title setTextColor:titleNortalColor];
        [title setTextAlignment:NSTextAlignmentCenter];
        [title setTag:3000+i];

        [button addTarget:self action:@selector(butonAction:) forControlEvents:UIControlEventTouchUpInside];
        [button addSubview:title];
        [self addSubview:button];
    }
}

-(void) selectPosition:(int) position{

    if (oldSelectPosition >= 0) {
        //设置原来被选择的状态
        FootBarItem *item0 = dataScoure[oldSelectPosition];
        UIButton *button0 = [self viewWithTag:1000+oldSelectPosition];
        UIImageView *iamgeView0 = [button0 viewWithTag:2000+oldSelectPosition];
        if (iamgeView0) {
            [iamgeView0 setImage:[UIImage imageNamed:item0.imageNortalName]];
        }
        UILabel *title0 = [button0 viewWithTag:3000+oldSelectPosition];
        if (title0) {
            [title0 setTextColor:titleNortalColor];
        }
    }

    //设置新选择的状态
    FootBarItem *item = dataScoure[position];
    UIButton *button = [self viewWithTag:1000+position];
    UIImageView *iamgeView = [button viewWithTag:2000+position];
    if (iamgeView) {
        [iamgeView setImage:[UIImage imageNamed:item.imageSelectName]];
    }
    UILabel *title = [button viewWithTag:3000+position];
    if (title) {
        [title setTextColor:titleSelectColor];
    }

    oldSelectPosition = position;

   //在这里可以创建代理,实现回调,当然使用Block也是可以的。

}


-(void) butonAction:(UIButton *) sender{
    [self selectPosition:((int)sender.tag - 1000)];
}
@end

适配工具类
FootBarItem.h

#import <Foundation/Foundation.h>

@interface FootBarItem : NSObject
@property (strong,nonatomic) NSString *title;
@property (strong,nonatomic) NSString *imageSelectName;
@property (strong,nonatomic) NSString *imageNortalName;

-(id) initWithTitile:(NSString *) title withNortalImageName:(NSString *) nortalImageName withSelectImageName:(NSString *)selectImageName;
@end

FootBarItem.m

//
//  FootBarItem.m
//  TyApp
//
//  Created by TY-DENG on 17/5/16.
//  Copyright © 2017年 Lin. All rights reserved.
//

#import "FootBarItem.h"

@implementation FootBarItem

-(id) initWithTitile:(NSString *) title withNortalImageName:(NSString *) nortalImageName withSelectImageName:(NSString *)selectImageName{
    self = [super init];
    self.title = title;
    self.imageNortalName = nortalImageName;
    self.imageSelectName = selectImageName;
    return self;
}

@end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值