百思不得姐项目(二)
前言
本文是在百思不得姐项目(一)基础上进行添加功能
一、自定义导航控制器
上篇文章已经实现的功能:
。
1.1 创建自定义导航控制器
- 在Other->Controller文件夹下新建自定义的导航控制器
LaNavigationController
/Snip20161017_1.png)
- 创建好之后,我们在
LaTabBarController.m中导入我们的导航控制器
#import "LaNavigationController.h"
- 在
- (void)setUpChildVC:(UIViewController *)vc Title:(NSString *)title Image:(NSString *)image SelectImage:(NSString *)selectImage方法中将以前的导航控制器改为我们自己的
// 包装导航控制器,添加导航控制器为tabBarController的子控制器
LaNavigationController *navigationController = [[LaNavigationController alloc] initWithRootViewController:vc];
我们测试一下:在LaEssenceViewController.m中添加一个测试
@implementation LaEssenceViewController
- (void)viewDidLoad {
[super viewDidLoad];
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
UIViewController *vc = [[UIViewController alloc] init];
vc.view.backgroundColor = [UIColor redColor];
[self.navigationController pushViewController:vc animated:YES];
}
@end
运行结果: /testNav.gif)
1.2 更改导航栏返回按钮
目前我们的导航栏返回按钮是蓝色,并且显示为上一个节目的title,所以我们需要更改返回按钮。
//
// LaNavigationController.m
// 百思不得姐
//
// Created by 柳钰柯 on 2016/10/17.
// Copyright © 2016年 柳钰柯. All rights reserved.
//
#import "LaNavigationController.h"
@interface LaNavigationController ()
@end
@implementation LaNavigationController
/**
当第一次使用这个类的时候会调用一次
*/
+ (void)initialize{
// 当导航栏用在LaNavigationController中才会生效
// UINavigationBar *bar = [UINavigationBar appearanceWhenContainedIn:[self class], nil];
UINavigationBar *bar = [UINavigationBar appearance];
[bar setBackgroundImage:[UIImage imageNamed:@"navigationbarBackgroundWhite"] forBarMetrics:UIBarMetricsDefault];
}
- (void)viewDidLoad {
[super viewDidLoad];
}
// 拦截pushViewController方法,更改导航栏的返回按钮
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated{
if (self.childViewControllers.count > 0 ) {// >0指除开当前视图还有一个视图
UIButton *returnButton = [UIButton buttonWithType:UIButtonTypeCustom]; // 自定义按钮
[returnButton setTitle:@"返回" forState:UIControlStateNormal]; // 设置按钮字体
[returnButton setImage:[UIImage imageNamed:@"navigationButtonReturn"] forState:UIControlStateNormal]; // 设置正常情况下的按钮
[returnButton setImage:[UIImage imageNamed:@"navigationButtonReturnClick"]forState:UIControlStateHighlighted]; // 设置高亮情况下的按钮
[returnButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; // 设置正常情况下字体颜色
[returnButton setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted]; // 设置高亮情况字体颜色
returnButton.size = CGSizeMake(70, 30); // 设置按钮尺寸
returnButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft; // 设置按钮左对齐
returnButton.contentEdgeInsets = UIEdgeInsetsMake(0, -10, 0, 0); // 按钮向左移动
[returnButton addTarget:self action:@selector(back) forControlEvents:UIControlEventTouchUpInside]; // 按钮绑定弹出事件
viewController.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:returnButton]; // 替换按钮
viewController.hidesBottomBarWhenPushed = YES; // 隐藏TabBar
}
[super pushViewController:viewController animated:YES]; // 此句放在最后让viewController可以覆盖上面的leftBarButtonItem
}
// 监听返回按钮,弹出当前界面
- (void)back{
[self popViewControllerAnimated:YES];
}
@end
运行效果: /selfNav.gif)
1.3 设置当前视图导航栏按钮
- 我们需要对每一个模块都添加按钮,按钮都有相同的属性(正常图片,高亮图片,事件绑定).所以我们需要先封装一个类来避免代码冗余.在Other->Category中添加一个
UIBarButtonItem的类扩展 - 在
header.h中添加#import "UIBarButtonItem+LaExtension.h"使整个工程可以使用这个类 - 同时我们注意到,整个项目都是一个背景颜色,所以我们需要设置全局背景颜色,同样在
Header.h中添加
#define LaRGBColor(r,g,b) [UIColor colorWithRed:(r) / 255.0 green:(g) / 255.0 blue:(b) / 255.0 alpha:1.0] // 宏->快速设置颜色
#define LaGlobalBg LaRGBColor(223,223,223) // 全局背景颜色
- 自定义
UIBarButtonItem
//
// UIBarButtonItem+LaExtension.h
// 百思不得姐
//
// Created by 柳钰柯 on 2016/10/17.
// Copyright © 2016年 柳钰柯. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface UIBarButtonItem (LaExtension)
/**
UIBarButtonItem类扩展
@param normalImage 正常图片
@param highlightedImage 高亮图片
@param action 绑定事件
@param target 目标
@return 返回一个BarButtonItem
*/
+ (instancetype)itemWithNormalImage:(NSString *)normalImage HighlightedImage:(NSString *)highlightedImage Action:(SEL)action Target:(id)target;
@end
==============================================================================================================================================
//
// UIBarButtonItem+LaExtension.m
// 百思不得姐
//
// Created by 柳钰柯 on 2016/10/17.
// Copyright © 2016年 柳钰柯. All rights reserved.
//
#import "UIBarButtonItem+LaExtension.h"
@implementation UIBarButtonItem (LaExtension)
+ (instancetype)itemWithNormalImage:(NSString *)normalImage HighlightedImage:(NSString *)highlightedImage Action:(SEL)action Target:(id)target{
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; // 自定义按钮
[button setBackgroundImage:[UIImage imageNamed:highlightedImage] forState:UIControlStateHighlighted]; // 设置高亮图片
[button setBackgroundImage:[UIImage imageNamed:normalImage] forState:UIControlStateNormal]; // 设置正常图片
button.size = button.currentBackgroundImage.size; // 设置按钮大小为当前图片大小
[button addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
// 包装为BarButtonIteam并返回
return [[UIBarButtonItem alloc]initWithCustomView:button];
}
@end
- 在每个类中创建item
//
// LaEssenceViewController.m
// 百思不得姐
//
// Created by 柳钰柯 on 2016/10/16.
// Copyright © 2016年 柳钰柯. All rights reserved.
//
#import "LaEssenceViewController.h"
@interface LaEssenceViewController ()
@end
@implementation LaEssenceViewController
- (void)viewDidLoad {
[super viewDidLoad];
// 设置导航栏内容
self.navigationItem.titleView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"MainTitle"]];
// 设置左边按钮
self.navigationItem.leftBarButtonItem = [UIBarButtonItem itemWithNormalImage:@"MainTagSubIcon" HighlightedImage:@"MainTagSubIconClick" Action:@selector(tagClick) Target:self];
// 设置背景色
self.view.backgroundColor = LaGlobalBg;
}
- (void)tagClick{
NSLog(@"%s line:%d",__func__,__LINE__);
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
UIViewController *vc = [[UIViewController alloc] init];
vc.view.backgroundColor = [UIColor redColor];
[self.navigationController pushViewController:vc animated:YES];
}
@end
==============================================================================================================================================
//
// LaMeViewController.m
// 百思不得姐
//
// Created by 柳钰柯 on 2016/10/16.
// Copyright © 2016年 柳钰柯. All rights reserved.
//
#import "LaMeViewController.h"
@interface LaMeViewController ()
@end
@implementation LaMeViewController
- (void)viewDidLoad {
[super viewDidLoad];
// 设置导航栏内容
self.navigationItem.title = @"我的";
// 添加两个按钮,先添加的在右边
self.navigationItem.rightBarButtonItems = @[
[UIBarButtonItem itemWithNormalImage:@"mine-setting-icon" HighlightedImage:@"mine-setting-icon-click" Action:@selector(settingClick) Target:self],// 设置按钮
[UIBarButtonItem itemWithNormalImage:@"mine-moon-icon" HighlightedImage:@"mine-moon-icon-click" Action:@selector(moonClick) Target:self] // 月亮按钮
];
// 设置背景色
self.view.backgroundColor = LaGlobalBg;
NSLog(@"%s line:%d",__func__,__LINE__);
}
- (void)settingClick{
NSLog(@"%s line:%d",__func__,__LINE__);
}
- (void)moonClick{
NSLog(@"%s line:%d",__func__,__LINE__);
}
@end
==============================================================================================================================================
//
// LaNewViewController.m
// 百思不得姐
//
// Created by 柳钰柯 on 2016/10/16.
// Copyright © 2016年 柳钰柯. All rights reserved.
//
#import "LaNewViewController.h"
@interface LaNewViewController ()
@end
@implementation LaNewViewController
- (void)viewDidLoad {
[super viewDidLoad];
// 设置导航栏内容
self.navigationItem.titleView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"MainTitle"]];
// 设置左边按钮
self.navigationItem.leftBarButtonItem = [UIBarButtonItem itemWithNormalImage:@"MainTagSubIcon" HighlightedImage:@"MainTagSubIconClick" Action:@selector(tagClick) Target:self];
// 设置背景色
self.view.backgroundColor = LaGlobalBg;
}
- (void)tagClick{
NSLog(@"%s line:%d",__func__,__LINE__);
}
@end
==============================================================================================================================================
//
// LaFriendTrendsViewController.m
// 百思不得姐
//
// Created by 柳钰柯 on 2016/10/16.
// Copyright © 2016年 柳钰柯. All rights reserved.
//
#import "LaFriendTrendsViewController.h"
@interface LaFriendTrendsViewController ()
@end
@implementation LaFriendTrendsViewController
- (void)viewDidLoad {
[super viewDidLoad];
// 设置导航栏内容
self.navigationItem.title = @"我的关注";
// 设置左边按钮
self.navigationItem.leftBarButtonItem = [UIBarButtonItem itemWithNormalImage:@"friendsRecommentIcon" HighlightedImage:@"friendsRecommentIcon-click" Action:@selector(friendClick) Target:self];
// 设置背景色
self.view.backgroundColor = LaGlobalBg;
}
- (void)friendClick{
NSLog(@"%s line:%d",__func__,__LINE__);
}
@end
- 运行结果
/selfNavBarButton.gif)
结语
本篇文章介绍了导航栏的介绍,后续的一些情等待更新. 欢迎转载,不用询问,注明出处即可.