• 导航控制器


    UINavigationController

    【导航控制器】

    首先需要在代理AppDelegate.m里边做设置

        self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];

        ViewController *vc = [[ViewController alloc]init];

        UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:vc];

        self.window.rootViewController = nav;

        [self.window makeKeyAndVisible];

    可以统一设置导航视图控制器

    //    设置title颜色,这个方法的参数是个字典

    //    NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:[UIColor redColor],NSForegroundColorAttributeName, nil];

    //   

    //    //统一设置 导航视图控制器的颜色(多个导航视图控制器)

    //    [[UINavigationBar appearance] setTitleTextAttributes:dict];

    UINavigationController是导航控制器,是一个容器视图控制器,用于切换具有层次关系的视图,而非同一级视图间的切换。

    1、视图控制器之间的切换

            a、向导航控制器压入一个新的视图控制器

                    [self.navigationController pushViewController:svc animated:YES];

            b、从导航控制器弹出最顶层的视图控制器(上一级)

                    [self.navigationController popViewControllerAnimated:YES];

            c、从导航控制器弹出到指定的视图控制器

        先从数组里边找到视图控制器

                    [self.navigationController popToViewController:controllers[1] animated:YES];

            d、从导航控制器弹出到根视图控制器

                    [self.navigationController popToRootViewControllerAnimated:YES];

    2、定制UINavigationBar

            a、是否半透明

                    bar.translucent = NO;

            b、设置背景图片

                    [bar setBackgroundImage:bgImage forBarMetrics:UIBarMetricsDefault];

            c、设置导航条风格,会影响状态栏的黑白显示

                    bar.barStyle = UIBarStyleDefault;

            d、设置背景色,测试时不要设置背景图

                    //iOS7.0之后设置背景色

                    bar.barTintColor = [UIColor whiteColor];

                    //iOS7.0之前设置背景色,7.0之后用于设置返回按钮的颜色

                    bar.tintColor = [UIColor blackColor];

            e、隐藏 / 显示导航栏

                    [self.navigationController setNavigationBarHidden:NO animated:YES];

        //导航条的高度64

        //状态栏 20

        //导航条的颜色默认是半透明(毛玻璃)效果,这个时候视图控制器的原点坐标是 屏幕的左上角。如果去掉毛玻璃效果,原点坐标是从导航栏下边开始

        self.navigationController.navigationBar.translucent = NO;

        //同一层次的导航控制子视图,他们只有一个navigationBar

        //设置导航条颜色

        self.navigationController.navigationBar.barTintColor = [UIColor cyanColor];

        //返回按钮的颜色(镂空颜色)

        self.navigationController.navigationBar.tintColor = [UIColor blueColor];

        

        //设置title颜色,这个方法的参数是个字典

    //    NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:[UIColor redColor],NSForegroundColorAttributeName, nil];

    //    [self.navigationController.navigationBar setTitleTextAttributes:dict];

        

        //统一设置 导航导航视图控制器的颜色(多个导航视图控制器)

       // [[UINavigationBar appearance] setTitleTextAttributes:dict];

       

       //设置navigation背景图片

    //    UIBarMetricsDefault,普通模式也叫人像模式,竖屏

    //    UIBarMetricsCompact,风景模式,横屏

        //如果只设置了竖屏下的背景图片,横屏也默认这个背景图片

        //如果图片高度为64的话,导航栏样式就是iOS7之后的融合样式

    //    UIImage *image64 = [UIImage imageNamed:@"header_bg64"];

    //    [self.navigationController.navigationBar setBackgroundImage:image64 forBarMetrics:UIBarMetricsDefault];

        

        //高度44 ,导航栏是跟状态栏分开的

       // UIImage *image44 = [UIImage imageNamed:@"header_bg"];

       

        //高度是42,宽度是10像素,这个时候平铺了图片

        //只要不是44或者64,都会充满64像素去平铺

    //    UIImage *image42 = [UIImage imageNamed:@"bg_navigationBar"];

    //    [self.navigationController.navigationBar setBackgroundImage:image42 forBarMetrics:UIBarMetricsDefault];

       

    //导航条的样式

    //    UIBarStyleDefault          = 0,

    //    UIBarStyleBlack            = 1,

    //    

    //    UIBarStyleBlackOpaque      = 1, // Deprecated. Use UIBarStyleBlack

    //    UIBarStyleBlackTranslucent = 2, // Deprecated. Use UIBarStyleBlack and set the translucent property to YES

        [self.navigationController.navigationBar setBarStyle:UIBarStyleBlack];

        

    //隐藏/显示导航栏

        //[self.navigationController setNavigationBarHidden:YES];

    3、定制UINavigationItem

            返回按钮的定制原则:

            a、若当前页设置了leftBarButtonItem(s),则优先显示自己定制的

            b、若没有设置leftBarButtonItem(s),则要看上一页的title

                    backBarButtonItem,其中后者优先但是不建议使用

            c、设置title的方式有两种self.titleself.navigationItem.title

                    它们两个其实是设置的同一个,最后设置的有效。

      //找到NavigationItem

        UINavigationItem *item = self.navigationItem;

        item.title = @"第二个";

        //self.title 与 item.title都能设置导航栏的标题,但是最后设置的有效

        //titleView 标题视图

        UIView *view1 = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 100, 30)];

        view1.backgroundColor = [UIColor redColor];

        item.titleView = view1;

        //item只对本视图控制器有效

        

        //第一个参数 创建一个系统风格的item

        //第二个参数 事件接受者

        //第三个参数 事件

        UIBarButtonItem *baritem1 = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemReply target:self action:@selector(baritem1Pressed:)];

        //设置右边的item

        item.rightBarButtonItem = baritem1;

        

        UIBarButtonItem *baritem2 = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemSearch target:self action:@selector(baritem2Pressed:)];

        //设置左边的item

       // item.leftBarButtonItem = baritem2;

        UIBarButtonItem *baritem3 = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(baritem3Pressed:)];

      

       //用文字设置BarButtonItem

    //    UIBarButtonItemStylePlain,

    //    UIBarButtonItemStyleBordered NS_ENUM_DEPRECATED_IOS(2_0, 8_0, "Use UIBarButtonItemStylePlain when minimum deployment target is iOS7 or later"),

    //    UIBarButtonItemStyleDone,

        UIBarButtonItem *textItem = [[UIBarButtonItem alloc]initWithTitle:@"确定" style:UIBarButtonItemStylePlain target:self action:nil];

       

        //用图片创建item

        UIImage *image = [UIImage imageNamed:@"btn_feedCell_collection_selected"];

        //用图片的最原始模式

        UIBarButtonItem *imageItem = [[UIBarButtonItem alloc]initWithImage:[image imageWithRenderingMode: UIImageRenderingModeAlwaysOriginal] style:UIBarButtonItemStylePlain target:self action:nil];

       

        //用视图创建

        UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];

        [btn setImage:[UIImage imageNamed:@"btn_increase"] forState:UIControlStateNormal];

        btn.frame = CGRectMake(0, 0, 40, 40);

        [btn addTarget:self action:@selector(btnItemPressed:) forControlEvents:UIControlEventTouchUpInside];

        UIBarButtonItem *viewItem = [[UIBarButtonItem alloc]initWithCustomView:btn];

        

        //用数组来设置item

        item.leftBarButtonItems = @[baritem2,baritem3,textItem,imageItem,viewItem];

        

        //定制返回按钮

        UIBarButtonItem *backItem = [[UIBarButtonItem alloc]initWithTitle:@"返回" style:UIBarButtonItemStylePlain target:self action:nil];

        item.backBarButtonItem = backItem;

    4、图片的拉伸

       UIImage *image = [UIImage imageNamed:@"Pasted Graphic.tiff"];

        UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(100, 200, 270, 150)];

        //UIEdgeInsets也是一个结构体 上左下右,就是离四条边的距离

        //指定cap到边的部分不会不会被拉伸,其余部分会拉伸,尤其是要注意的是,拉伸的时候是从左到右,从上到下,通俗点说,拉伸不是全方向的拉伸,而是(先)垂直和(后)水平叠加。

        image = [image resizableImageWithCapInsets:UIEdgeInsetsMake(20, 100, 10, 10)];

        imageView.image = image;

        [self.view addSubview:imageView];

    /**

     *  自定义返回按钮

     */

    - (void)customBackItem {

        //btn_navigationBar_back

        UIImage *image = [UIImage imageNamed:@"btn_navigationBar_back"];

         //第一种风格的返回按钮 文字和箭头

        UIBarButtonItem *item = [[UIBarButtonItem alloc]init];

        [item setBackButtonBackgroundImage:[image resizableImageWithCapInsets:UIEdgeInsetsMake(0, image.size.width, 0, 0)] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

        self.navigationItem.backBarButtonItem = item;

        

         //第一种风格的返回按钮 箭头

    //    UIBarButtonItem *item = [[UIBarButtonItem alloc]init];

    //    [item setBackButtonBackgroundImage:[image resizableImageWithCapInsets:UIEdgeInsetsMake(0, image.size.width, 0, 0)] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

    //    //设置返回按钮的文字不显示

    //    [item setBackButtonTitlePositionAdjustment:UIOffsetMake(NSIntegerMin, NSIntegerMin) forBarMetrics: UIBarMetricsDefault];

    //    

    //    self.navigationItem.backBarButtonItem = item;

    }

    4、定制UIToolbar

            a、背景色以及背景图

            b、定制toolbarItems

    /**

     *  自定义toolbar,每个在导航控制器只有一个toolbar,但是上面的item需要定制

     */

    - (void)customToolBar {

        [self.navigationController setToolbarHidden:NO];

        UIBarButtonItem *item = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:nil action:nil];

        UIBarButtonItem *item1 = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemReply target:nil action:nil];

         //自动挤压两边的item,也是用来占位的

    //    UIBarButtonSystemItemFlexibleSpace,

        //固定宽度,不显示,用来占位的

    //    UIBarButtonSystemItemFixedSpace,

        UIBarButtonItem *itemSpace = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];

        itemSpace.width = 100;

        self.toolbarItems = @[item,itemSpace,item1];

    }

    界面将来消失,下一个界面不显示ToolBar

    - (void)viewWillDisappear:(BOOL)animated {

        [super viewWillDisappear:animated];

        //隐藏toolbar

        [self.navigationController setToolbarHidden:YES animated:YES];

    }

    已经显示过的界面,保证再次出现任有ToolBar

    - (void)viewDidAppear:(BOOL)animated {

        [super viewDidAppear:animated];

        [self.navigationController setToolbarHidden:NO animated:YES];

    }

  • 相关阅读:
    《那些年啊,那些事——一个程序员的奋斗史》——26
    《那些年啊,那些事——一个程序员的奋斗史》——26
    《那些年啊,那些事——一个程序员的奋斗史》——26
    Linux系统网络性能实例分析
    数据库服务器的性能调优-续
    数据库服务器的性能调优
    Linux 虚存 linux2.6内核特性
    Linux 虚存的性能问题
    linux系统性能监控--网络利用率
    IIS Express服务器遇到400/503/IIS Express Error的解决办法
  • 原文地址:https://www.cnblogs.com/jiang-xiao-yan/p/5952492.html
Copyright © 2020-2023  润新知