iOS学习笔记-088.彩票03——设置导航条

彩票03——设置导航条

前面的文章中,

iOS学习笔记-086.彩票01——框架搭建

iOS学习笔记-087.彩票02——自定义tabBar

我们已经设置了好了tabBar,现在我们来设置我们的导航条。

一、在 QWMTabBarViewController 中设置导航条

1.1 方法说明与修改

我们知道,我们的根控制器是 QWMTabBarViewController,在这里面我们创建我们需要tabBar以及对应的控制器。现在我们的五个大的分类控制器中,都有导航条,那么我们需要添加的导航条就在这个类中添加。我们需要添加导航条的方法是

-(void)setupOneChildViewController:(UIViewController *)vc image:(UIImage *)image selImage:(UIImage *)selImage

那么这个方法中,我们需要干些什么呢?

  1. 由于我们的导航条需要显示我们的标题,所以我们需要标题的文字,那么这个文字哪里来呢?方法传递进来,所以我们修改方法为:
-(void)setupOneChildViewController:(UIViewController *)vc image:(UIImage *)image selImage:(UIImage *)selImage title:(NSString *)title
  1. 我们需要导航条,那么我们可是使用导航控制器来包装我们的控制。然后设置相应的属性。
//添加一个子控制器
-(void)setupOneChildViewController:(UIViewController *)vc image:(UIImage *)image selImage:(UIImage *)selImage title:(NSString *)title{
//    [self addChildViewController:vc];

    //设置我们控制器的一些属性
    vc.tabBarItem.image = image;
    vc.tabBarItem.selectedImage = selImage;
    [self.items addObject:vc.tabBarItem];
    //添加标题
    vc.navigationItem.title = title;

    //导航控制器部分----------------------
    //设置导航控制器包装我们现在的控制器
    UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:vc];

    //设置导航条的一些属性 背景
    [nav.navigationBar setBackgroundImage:[UIImage imageNamed:@"NavBar64"] forBarMetrics:UIBarMetricsDefault];

    // 设置字体颜色大小
    //创建一个集合
    NSMutableDictionary *ditM = [NSMutableDictionary dictionary];
    //字体颜色
    ditM[NSForegroundColorAttributeName] = [UIColor whiteColor];
    //字体大小
    ditM[NSFontAttributeName] = [UIFont boldSystemFontOfSize:24];
    [nav.navigationBar setTitleTextAttributes:ditM];

    [self addChildViewController:nav];
}

1.2 图示

这里写图片描述


1.3 缺陷与不足

使用现在的这种方式,我们发现,关于导航栏的东西全部放在了 QWMTabBarViewController 中。这与我们的封装思想相违背,所以我们应该把它放到导航栏中去,那么怎么放进去呢,当然是自定义啦。


二、自定义导航控制器 1 —— 在 viewDidLoad 中完成初始化

2.1 方法说明与修改

我们自定义了导航控制器,那么我们需要完成导航条的一些初始化,现在我们把这些初始化,放在 viewDidLoad 中完成

//
//  QWMNavigationController.m
//  03_UIView79_彩票
//
//  Created by 杞文明 on 17/8/13.
//  Copyright © 2017年 杞文明. All rights reserved.
//

#import "QWMNavigationController.h"
@interface QWMNavigationController ()
@end

@implementation QWMNavigationController
- (void)viewDidLoad {
    [super viewDidLoad];
    //设置背景
    [self.navigationBar setBackgroundImage:[UIImage imageNamed:@"NavBar64"] forBarMetrics:UIBarMetricsDefault];
    //设置字体颜色
    NSMutableDictionary *ditM = [NSMutableDictionary dictionary];
    ditM[NSForegroundColorAttributeName] = [UIColor whiteColor];
    //大小
    ditM[NSFontAttributeName] = [UIFont boldSystemFontOfSize:24];
    //设置navigationbar的属性
    [self.navigationBar setTitleTextAttributes:ditM];

}
@end

然后我们需要在 QWMTabBarViewController 的 setupOneChildViewController
方法中进行相应的修改 。其次我们这里还创建了两个不同的导航控制器哦。

//添加一个子控制器
-(void)setupOneChildViewController:(UIViewController *)vc image:(UIImage *)image selImage:(UIImage *)selImage title:(NSString *)title{
//    [self addChildViewController:vc];

    //设置我们控制器的一些属性
    vc.tabBarItem.image = image;
    vc.tabBarItem.selectedImage = selImage;
    [self.items addObject:vc.tabBarItem];
    //添加标题
    vc.navigationItem.title = title;

    //创建自滚一的导航条
    UINavigationController *nav;
    if([vc isKindOfClass:[QWMArenaViewController class]]){
        nav = [[UINavigationController alloc]initWithRootViewController:vc];
    }else{
        nav = [[QWMNavigationController alloc]initWithRootViewController:vc];
    }

    [self addChildViewController:nav];
}

2.2 图示

这里写图片描述

2.3 缺陷与不足

虽然我们进行了封装,实现了类的各司其职。但是我们这里会发现一个事情,我们关于导航条的设置会设置5次。我们希望设置一次就行了,却要设置5次,这下就尴尬了。那么我们接下来就想想办法只设置一次呗。


三、自定义导航控制器 2 —— 在 initialize 中完成初始化

3.1 方法说明与修改

我们只需要设置一次,那么我们可以把这个这些设置放在 initialize 中。那么问题来了,我们如何获取我们的 NavigationBar呢,其实我们可以通过标识来获取 NavigationBar
所以我哦们的方法修改如下

//
//  QWMNavigationController.m
//  03_UIView79_彩票
//
//  Created by 杞文明 on 17/8/13.
//  Copyright © 2017年 杞文明. All rights reserved.
//

#import "QWMNavigationController.h"

@interface QWMNavigationController ()

@end

@implementation QWMNavigationController

// 什么时候调用 当第一次初始这个类的时候调用
// 作用 初始化这个类
+ (void)initialize{
    //获取导航栏标识
    //appearance 是一个协议, 只要遵守了这协议都有这方法
    //使用这个方法会产生的bug,它会统一定制我们的导航条,所有的导航条都是一样的,无法实现我们上面一步中实现的效果,因此,我们不能使用这个方法
    //UINavigationBar *bar = [UINavigationBar appearance];

    //获取某几个类的导航条标识 ,只修改我们设置的这几个导航条类的导航条
    UINavigationBar *bar = [UINavigationBar appearanceWhenContainedIn:[QWMNavigationController class], nil];

    //设置背景
    [bar setBackgroundImage:[UIImage imageNamed:@"NavBar64"] forBarMetrics:UIBarMetricsDefault];
    //设置字体颜色
    NSMutableDictionary *ditM = [NSMutableDictionary dictionary];
    ditM[NSForegroundColorAttributeName] = [UIColor whiteColor];
    //大小
    ditM[NSFontAttributeName] = [UIFont boldSystemFontOfSize:24];
    //设置navigationbar的属性
    [bar setTitleTextAttributes:ditM];
}

@end
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值