zoukankan      html  css  js  c++  java
  • 设置二级导航栏的返回按钮

    1. 一般情况下的导航栏跳转,当在一级界面跳转到二级界面的时候,左item的会出现 “返回箭头+一级导航栏的标题”;

    比如说:一级导航栏是“白菜精华”,那么二级导航栏的返回键是 :

    2. 当我们使用下方的代码(下方代码是在一级界面写)时,确实可以当跳转到二级界面的时候,左上角是“返回图标 + 返回”;

     self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"返回" style:UIBarButtonItemStyleDone target:nil action:nil];

    但是 当二级界面 push 到三级界面的时候,还是需要上方的代码写在二级界面中。当项目有10个以上的界面,看着就会很臃肿。所以,可以拦截 导航栏的push方法。在这个方法中进行统一的修改。

    3. 自定义导航控制器,重写它的push方法

    3.1 创建“WYNavigationController:UINavigationController” , 在.m 方法中写 :

    /**
     * 可以在这个方法中拦截所有push进来的控制器
     */
    - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
    {
        [super pushViewController:viewController animated:NO];
        
        // target 传空也会有一个默认的点击 方法可以用来返回到上一个界面
        viewController.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"返回" style:UIBarButtonItemStyleDone target:nil action:nil];
    }

    3.2  使用上列方法给返回按钮修改文字颜色的时候会出现,只能设置普通文字颜色,不能设置点击的时候的文字颜色:

    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view.
        
        // 返回文字颜色修改
        self.navigationBar.tintColor = [UIColor blueColor];
    }

    所以,返回按钮的颜色修改,不是使用的 3.1 的方法设置的。而是使用UIButton的。

    写法如下:

    /**
     * 可以在这个方法中拦截所有push进来的控制器
     */
    - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
    {
        if (self.childViewControllers.count > 0) { // 如果push进来的不是第一个控制器
            UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
            [button setTitle:@"返回" forState:UIControlStateNormal];
            [button setImage:[UIImage imageNamed:@"navigationButtonReturn"] forState:UIControlStateNormal];
            [button setImage:[UIImage imageNamed:@"navigationButtonReturnClick"] forState:UIControlStateHighlighted];
            button.size = CGSizeMake(70, 30);
            // 让按钮内部的所有内容左对齐
            button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
    //        [button sizeToFit];
            // 让按钮的内容往左边偏移10
            button.contentEdgeInsets = UIEdgeInsetsMake(0, -10, 0, 0);
            [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
            [button setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted];
            [button addTarget:self action:@selector(back) forControlEvents:UIControlEventTouchUpInside];
            viewController.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:button];
            // 隐藏tabbar
            viewController.hidesBottomBarWhenPushed = YES;
        }
        
        // 这句super的push要放在后面, 让viewController可以覆盖上面设置的leftBarButtonItem
        [super pushViewController:viewController animated:animated];
    }
    
    - (void)back
    {
        [self popViewControllerAnimated:YES];
    }

    导航控制器补充1:

    /**
     * 可以在这个方法中拦截所有push进来的控制器
     */
    - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
    {
        // 当 animated 为 NO 的时候,就代表所有push进来的导航控制器都没有动画效果。
        [super pushViewController:viewController animated:NO];
    }
  • 相关阅读:
    C知识(#一些笔记)
    我整理的Python规则(2)
    我整理的Python代码规则
    教你如何通俗易懂的了解深度学习知识
    c#中委托和事件(续)(转)
    c#中的委托和事件(转)
    .Net neatupload上传控件实现文件上传的进度条
    C#常用日期格式处理转换[C#日期格式转换大全
    C#string常用函数总结
    数据库08版本如何移动到05的数据中
  • 原文地址:https://www.cnblogs.com/iOS363536404/p/5627094.html
Copyright © 2011-2022 走看看