自定义UINavigationController(导航控制器)

首先,我先说说怎样自定义导航控制器。

1.自定义导航控制器需要新建一个类继承UINavigationController。如图:

2.在initialize方法中,自定义一些属于自己的navigationBar的一些东西。比如:颜色,文字,适配IOS7等等...

/**
 *  初始化(每一个类只会调用一次)
 */
+ (void)initialize
{
    [UIColor colorWithRed:226/255.0 green:226/255.0 blue:226/255.0 alpha:1.0];

    // 1.获得bar对象
    UINavigationBar *navBar = [UINavigationBar appearance];

    // 2.不是iOS7
    if (!iOS7) {
        // 2.1.设置bar背景
        [navBar setBackgroundImage:[UIImage imageWithName:@"navigationbar_background"] forBarMetrics:UIBarMetricsDefault];

        // 2.2.设置状态栏为黑色
        [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleBlackOpaque;
    }

    // 3.设置文字样式
    NSMutableDictionary *attrs = [NSMutableDictionary dictionary];
    attrs[UITextAttributeTextColor] = [UIColor blackColor];
    attrs[UITextAttributeTextShadowOffset] = [NSValue valueWithUIOffset:UIOffsetMake(0, 0)];
    attrs[UITextAttributeFont] = iOS7 ? [UIFont systemFontOfSize:20]: [UIFont boldSystemFontOfSize:20];
    [navBar setTitleTextAttributes:attrs];

    // 4.设置导航栏按钮的主题
    UIBarButtonItem *barItem = [UIBarButtonItem appearance];

    // 5.设置按钮的背景
    if (!iOS7) {
        [barItem setBackgroundImage:[UIImage imageWithName:@"navigationbar_button_background"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
        [barItem setBackgroundImage:[UIImage imageWithName:@"navigationbar_button_background_pushed"] forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];
        [barItem setBackgroundImage:[UIImage imageWithName:@"navigationbar_button_background_disable"] forState:UIControlStateDisabled barMetrics:UIBarMetricsDefault];
    }

    // 6.设置按钮的文字样式
    NSMutableDictionary *itemAttrs = [NSMutableDictionary dictionary];
    itemAttrs[UITextAttributeTextColor] = iOS7 ? [UIColor orangeColor] : [UIColor blackColor];
    itemAttrs[UITextAttributeTextShadowOffset] = [NSValue valueWithUIOffset:UIOffsetMake(0, 0)];
    [barItem setTitleTextAttributes:itemAttrs forState:UIControlStateNormal];
    [barItem setTitleTextAttributes:itemAttrs forState:UIControlStateHighlighted];
}

自定义UINavigationController(导航控制器),布布扣,bubuko.com

时间: 2024-10-06 06:52:39

自定义UINavigationController(导航控制器)的相关文章

UINavigationController导航控制器

UINavigationController导航控制器,是多个界面间跳转的重要元素,可以理解为它存储着多个viewController,它的存储结构是栈,栈的特点是先进后出,所以添加视图控制器时,要特别注意. UINavigationController有几个常用的方法: 1:[UINavigationController initWithRootViewController:viewController ] 是指将哪一个视图控制器设置为导航控制器的根视图控制器,即运行是第一次看到的界面. 2:

IOS UINavigationController 导航控制器

/** 导航控制器掌握: 1.创建导航控制器 UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:self.viewController]; 2.zhan (zhan 中所有的子控制器) self.navigationController.viewControllers; 3.将控制器压入zhan 中 [self.navigationController pushView

UINavigationController 导航控制器、页面间通信

UINavigationController 导航控制器.页面间通信 (2014-08-27 10:33:17) 转载 ▼ 正文开始 栈的方式管理? 就是先进后出的管理方式,通过出栈和入栈来展示各个视图控制器 UINavigationController的ContentView里始终显示栈顶控制器的view viewControllers属性存储了栈中的所有被管理的控制器 navigationController属性,父类中的属性,每个在栈中的控制器,都能通过此属性,获取自己所在的UINavig

【iOS开发-21】UINavigationController导航控制器初始化,导航控制器栈的push和pop跳转理解

(1)导航控制器初始化的时候一般都有一个根视图控制器,导航控制器相当于一个栈,里面装的是视图控制器,最先进去的在最以下,最后进去的在最上面.在最上面的那个视图控制器的视图就是这个导航控制器对外展示的界面,也就是用户看到的界面. (2)我们须要把导航控制器载入到APP中,须要把这个导航控制器设置为window的根视图控制器(都是控制器类,能够赋值),这样就相当于载入到了window里. (3)我们要在栈中新增或者删除一个视图控制器,就须要得到导航控制器,一般在栈中得全部视图控制器都有一个self.

iOS彩票项目--第五天,新特性引导页的封装、返回按钮的自定义、导航控制器的滑动返回以及自定义滑动返回功能

一.上次实现了在AppDelegate中通过判断app版本决定是否进入新特性页面,今天将AppDelegate中的一坨进行了封装.将self.window的根控制器到底应该为新特性界面,还是主页面,封装到了导航工具类ChaosGuideTool 封装,先决定外面怎么用,然后实现方法.外部通过类方法调用  + (UIViewController *)chooseRootVC; 外部的APPDelegate 只是调用方法 之前的业务判断没有改变,只是将数据的存储进行了封装 二.返回按钮的自定义 <1

UINavigationController 导航控制器

初始方法: - (id)initWithRootViewControl:(UIViewController *)rootViewController //初始化时,传递一个视图控制器的参数,作为导航控制器的根视图控制器,导航控制器实例加载完成后,根视图控制器的视图会被添加到导航控制器中 入栈操作: //从导航控制器某一个视图里面把另一个视图Push进导航控制器栈中. [self.navigationController pushViewController:(UIViewController *

UINavigationController 导航控制器 常用总结

//导航控制器跳转到下一页 [self.navigationController pushViewController:second animated:YES]; //返回上一页 [self.navigationController popViewControllerAnimated:YES]; //返回首页:popToRootViewControllerAnimated   除第一个页面外,其他的页面全部出栈 [self.navigationController popToRootViewCo

IOS 学习 开发 自定义 UINavigationController 导航

文件目录如下:基本导航顺序: root -> First -> Second -> Third.其中,FirstViewController作为 navigation堆栈的rootview 1.创建navigation. 如果是想直接把navigation导航作为项目一开始的跟视图,把RootViewController.h文件里的nav属性放到AppDelegate.h里即可,再把RootViewController.m文件里的action的代码复制到 AppDelegate.m里的d

iOS开发项目篇—03添加导航控制器

iOS开发项目篇—03添加导航控制器 一.简单说明 分析:分析微博应用,我们需要给每个子控制器都添加一个导航控制器(每个子控制器的导航不一样),所以需要新建一个导航控制器,然后把该导航控制器作为window的根控制器,添加的四个子控制器,分别添加在导航控制器上,也就是说整个项目采用当前主流的UI框架,一个UITabBarController管理着四个UINavigationController,而每个UINavigationController则分别管理着“首页”.“消息”.“发现”和“我”这四