一.导航栏类的准备
1.创建一个XLNavigationController类,用于管理导航栏的一些设置
2.向UIConstants中导入一些颜色设置
//导航栏的背景颜色
#define kNavigationBarTintColor [UIColor colorWithRed:249/255.0 green:245/255.0 blue:248/255.0 alpha:1];
//按钮的颜色
#define kNavigationBarItemColor [UIColor colorWithRed:99/255.0 green:102/255.0 blue:111/255.0 alpha:1]
3.导航栏的相关设置
- (void)viewDidLoad {
[super viewDidLoad];
//设置背景颜色
self.navigationBar.barTintColor = kNavigationBarTintColor;
//设置导航栏标题的字体大小和字体颜色
self.navigationBar.titleTextAttributes = @{NSFontAttributeName:[UIFont systemFontOfSize:20],NSForegroundColorAttributeName:[UIColor blackColor]};
}
二.工具条类的准备
1.创建XLToolBarView类,用于充当工具条的作用
2..在EnumConstants里面定义一个block类型,用于回调工具条哪一个按钮被点击了
//定义一个block类型,用于自定义toolBar回调按钮的事件
typedef void(^ToolBarBlock) (NSInteger index);
3.定义一个数组用于接受创建的按钮信息和用于回调那个按钮被点击的变量
/**接受外部传递的信息*/
@property (nonatomic,copy) NSArray *itemsArray;
/**回调某个按钮被点了*/
@property (nonatomic,copy) ToolBarBlock block;
4.重写initWithFrame方法,设置背景颜色
-(instancetype)initWithFrame:(CGRect)frame{
if (self = [super initWithFrame:frame]) {
self.backgroundColor = kNavigationBarTintColor;
}
return self;
}
5.重写itemsArray的set方法,将按钮显示
#pragma mark -------重写itemsArray的set方法 ---------
-(void)setItemsArray:(NSArray *)itemsArray{
_itemsArray = itemsArray;
//计算按钮之间的间距
CGFloat kPadding = (SCREEN_WIDTH-itemsArray.count*kSize) / (itemsArray.count+1);
//添加
for (int i = 0; i < itemsArray.count; i++) {
//创建
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
//坐标
btn.frame = CGRectMake(kPadding+i*(kPadding+kSize), (42-kSize)/2.0, kSize, kSize);
//tag值
btn.tag = i+1;
//赋予图片
[btn setImage:[UIImage imageNamed:[itemsArray objectAtIndex:i]] forState:UIControlStateNormal];
//添加事件
[btn addTarget:self action:@selector(btnDidClicked:) forControlEvents:UIControlEventTouchUpInside];
//显示
[self addSubview:btn];
}
}
#pragma mark -------按钮被点了 ---------
-(void)btnDidClicked:(UIButton *)sender{
if (self.block) {
self.block(sender.tag);
}
}
三.界面类的准备
1.创建XLBaseViewController类,作为各个界面的父类
2.定义两个block类型,用于正常按钮和返回按钮被点击的回调事件
//定义的block类型
typedef void (^BackBlock)(void);
typedef void (^ItemBlock)(UIButton *item);
3.在EnumConstants里面加入两个将要用到的枚举
//导航栏上添加按钮的位置
typedef NS_ENUM(NSInteger,kButtonPostionType){
kButtonPostionTypeLeft, //左边
kButtonPostionTypeRight, //右边
kButtonPostionTypeNone //不需要位置
};
//工具条的类型
typedef NS_ENUM(NSInteger,ToolBarType) {
ToolBarTypeMain, //主界面
ToolBarTypeAlbum, //相册
ToolBarTypeBrowser//相册浏览
};
4.定义一些接口用于相关设置
//添加正常按钮
-(UIBarButtonItem *)addItemWithName:(NSString *)name postion:(kButtonPostionType)postion complish:(ItemBlock)block;
//添加返回按钮
-(void)addBackItem:(BackBlock)block;
//添加logo
-(void)addLogo;
//添加ToolBar
-(void)showToolBarWithType:(ToolBarType)type handle:(ToolBarBlock)block;
//隐藏ToolBar
-(void)hideToolBar;
5.导入工具条类,定义一些要用到的变量,并设置默认背景颜色
#import "XLBaseViewController.h"
#import "XLToolBarView.h"
@interface XLBaseViewController ()
/**返回按钮的block属性变量*/
@property (nonatomic,copy) BackBlock backBlock;
/**左边按钮的block属性变量*/
@property (nonatomic,copy) ItemBlock leftItemBlock;
/**右边按钮的block属性变量*/
@property (nonatomic,copy) ItemBlock rightItemBlock;
/**底部工具栏*/
@property (nonatomic,strong) XLToolBarView *toolBarView;
@end
@implementation XLBaseViewController
- (void)viewDidLoad {
[super viewDidLoad];
//设置默认背景颜色
self.view.backgroundColor = [UIColor whiteColor];
}
6.写一个方法用来创建正常按钮
#pragma mark -------创建按钮 ---------
-(UIBarButtonItem *)createItemWithTitle:(NSString *)title image:(NSString *)imgName action:(SEL)action postion:(kButtonPostionType)postion{
//获取图片
UIImage *img = [UIImage imageNamed:imgName];
//获取一张可拉伸的图片,拉伸点为图片的中心点
UIImage *stretchableImg = [img stretchableImageWithLeftCapWidth:img.size.width/2.0 topCapHeight:img.size.height/2.0];
//创建
UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 45, 30)];
//设置tag值辨别左右,0左边,1右边,参考枚举
btn.tag = postion;
//设置图片
[btn setBackgroundImage:stretchableImg forState:UIControlStateNormal];
//设置文本
[btn setTitle:title forState:UIControlStateNormal];
//设置文本颜色
[btn setTitleColor:kNavigationBarItemColor forState:UIControlStateNormal];
//添加事件
[btn addTarget:self action:action forControlEvents:UIControlEventTouchUpInside];
//创建UIBarItem
UIBarButtonItem *barItem = [[UIBarButtonItem alloc] initWithCustomView:btn];
return barItem;
}
7.创建正常按钮和返回按钮,并添加方法
#pragma mark -------添加一个按钮-给左边还是右边,以及block ---------
-(UIBarButtonItem *)addItemWithName:(NSString *)name postion:(kButtonPostionType)postion complish:(ItemBlock)block{
//创建按钮
UIBarButtonItem *item = [self createItemWithTitle:name image:nil action:@selector(barBarItemDidClick:) postion:postion];
//判断创建的按钮位置
if (postion == kButtonPostionTypeLeft) {
//显示
self.navigationItem.leftBarButtonItem = item;
//保存block
self.leftItemBlock = block;
}else{
//显示
self.navigationItem.rightBarButtonItem = item;
//保存block
self.rightItemBlock = block;
}
return item;
}
#pragma mark -------添加返回按钮 ---------
-(void)addBackItem:(BackBlock)block{
//保存block
self.backBlock = block;
//创建按钮
UIBarButtonItem *back = [self createItemWithTitle:@"Back" image:nil action:@selector(backBarItemDidClick:) postion:kButtonPostionTypeNone];
//显示
self.navigationItem.leftBarButtonItem = back;
}
#pragma mark -------正常按钮触发的事件 ---------
-(void)barBarItemDidClick:(UIButton *)sender{
//判断按钮的位置-回调事件
if (sender.tag == kButtonPostionTypeLeft) {
if (self.leftItemBlock) {
self.leftItemBlock(sender);
}
}else{
if (self.rightItemBlock) {
self.rightItemBlock(sender);
}
}
}
#pragma mark -------返回按钮触发的事件 ---------
-(void)backBarItemDidClick:(UIBarButtonItem *)sender{
//回调事件
if (self.backBlock) {
self.backBlock();
}
//返回上一个界面
[self.navigationController popViewControllerAnimated:YES];
}
8.导入素材,并实现添加logo的方法
-(void)addLogo{
//设置图片大小
UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 120, 19)];
//设置图片
imgView.image = [UIImage imageNamed:@"NavigationBar_Logo_normal"];
//显示
self.navigationItem.titleView = imgView;
}
9.实现添加工具条和移除工具条的方法
#pragma mark -------添加ToolBar ---------
-(void)showToolBarWithType:(ToolBarType)type handle:(ToolBarBlock)block{
NSArray *itemsArray = nil;
if (type == ToolBarTypeMain) {
//主界面
itemsArray = @[@"select-all",@"delete"];
}else if(type == ToolBarTypeAlbum){
//相册界面
itemsArray = @[@"select-all",@"copy",@"cut",@"delete"];
}else{
//相册浏览界面
itemsArray = @[@"delete",@"more"];
}
//创建toolBar
self.toolBarView = [[XLToolBarView alloc] initWithFrame:CGRectMake(0, SCREEN_HEIGHT, SCREEN_WIDTH, 42)];
//接受数据
_toolBarView.itemsArray = itemsArray;
//保存block
_toolBarView.block = block;
//显示
[self.view addSubview:_toolBarView];
[UIView animateWithDuration:0.5 animations:^{
_toolBarView.y = SCREEN_HEIGHT-42;
}];
}
#pragma mark -------隐藏ToolBar ---------
-(void)hideToolBar{
[UIView animateWithDuration:0.5 animations:^{
_toolBarView.y = SCREEN_HEIGHT;
} completion:^(BOOL finished) {
[_toolBarView removeFromSuperview];
}];
}