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

来源:互联网 发布:杭州网站建设优化 编辑:程序博客网 时间:2024/05/17 02:59

  • 彩票03设置导航条
    • 一在 QWMTabBarViewController 中设置导航条
      • 1 方法说明与修改
      • 2 图示
      • 3 缺陷与不足
    • 二自定义导航控制器 1 在 viewDidLoad 中完成初始化
      • 1 方法说明与修改
      • 2 图示
      • 3 缺陷与不足
    • 三自定义导航控制器 2 在 initialize 中完成初始化
      • 1 方法说明与修改

彩票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
原创粉丝点击