[BS-10] 统一设置app所有页面的“返回”按钮样式

统一设置app所有页面的“返回”按钮样式

如果想统一设置app所有页面的“返回”按钮样式,首先自定义WZNavigationController类继承UINavigationController类,然后在自定义类中重写pushViewController: animated:方法即可。

//重写navC的pushVC方法,以便统一设置push进来的vc的左侧“返回”按钮
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated {

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

    //这句会立即调用被push的VC的viewDidLoad方法,必须放在最后面,否则上面的代码会对viewDidLoad中代码造成覆盖,导致viewDidLoad设置无效。
    [super pushViewController:viewController animated:animated];//animated换为NO,所有VC没有动画
}

统一设置app所有页面的LeftBarButton按钮样式Demo

//WZNavigationController.h

#import <UIKit/UIKit.h>
@interface WZNavigationController : UINavigationController
@end

//WZNavigationController.m

#import "WZNavigationController.h"

@implementation WZNavigationController

//第一次使用该类时调用该方法(只调用一次)
+ (void)initialize {

    //UINavigationBar *bar = [UINavigationBar appearance];使用这个以后所有其他自定义类的nav都会使用该背景色
    UINavigationBar *bar = [UINavigationBar appearanceWhenContainedIn:[self class], nil];//只在本类及子类有效
    [bar setBackgroundImage:[UIImage imageNamed:@"navigationbarBackgroundWhite"] forBarMetrics:UIBarMetricsDefault];
}

- (void)viewDidLoad {
    [super viewDidLoad];

    //设置导航栏的背景图片(放在这每次创建nav都会调用)
    //[self.navigationBar setBackgroundImage:[UIImage imageNamed:@"navigationbarBackgroundWhite"] forBarMetrics:UIBarMetricsDefault];

    //设置导航栏染色描边颜色
    //self.navigationBar.tintColor = [UIColor blackColor];
}

/**
 *  作法1. 苹果默认只能让你在当前vc修改下一vc左侧Back按钮的名字,不能修改字体颜色和高亮颜色,也不能添加自定义按钮;
 *  通过self.navigationBar.tintColor = [UIColor blackColor];可以修改“返回”颜色(默认蓝色),但该方法却怎么也实现不了长按“返回”高亮时的红色。
 */

/*
//重写navC的pushVC方法,以便统一设置push进来的vc的左侧“返回”按钮
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated {

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

    //这句会立即调用被push的VC的viewDidLoad方法,必须放在最后面,否则上面的代码会对viewDidLoad中代码造成覆盖,导致viewDidLoad设置无效。
    [super pushViewController:viewController animated:animated];//animated换为NO,所有VC没有动画
}
*/

/**
 *  作法2. 因为苹果默认不让添加自定义按钮到本页面管理的下一页面的Back按钮,那么我们可以自定义下一页面的leftBarButtonItem;

 */

//重写navC的pushVC方法,以便统一设置push进来的vc的左侧“返回”按钮
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated {

    if(self.viewControllers.count >= 1)
    {
        UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
        btn.bounds = CGRectMake(0, 0, 100, 21); //必须设置尺寸大小
        [btn setTitle:@"返回" forState:UIControlStateNormal];
        [btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
        [btn setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted];
        [btn setImage:[UIImage imageNamed:@"navigationButtonReturn"] forState:UIControlStateNormal];
        [btn setImage:[UIImage imageNamed:@"navigationButtonReturnClick"] forState:UIControlStateHighlighted];//此处不需要拉伸,所以setImage,不能错写成BackgroundImage了
        //设置btn内容水平靠左
        btn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
        //设置-10的内边距,让它更靠左(-10特殊用法)
        btn.contentEdgeInsets = UIEdgeInsetsMake(0, -10, 0, 0);
        //btn添加事件
        [btn addTarget:self action:@selector(back) forControlEvents:UIControlEventTouchUpInside];
        viewController.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithCustomView:btn];
        //当vc被push进入nav时隐藏底部bar
        viewController.hidesBottomBarWhenPushed = YES;

    }

    //这句会立即调用被push的VC的viewDidLoad方法,必须放在最后面,否则上面的代码会对viewDidLoad中代码造成覆盖,导致viewDidLoad设置无效。
    [super pushViewController:viewController animated:animated];//animated换为NO,所有VC没有动画
}

- (void)back {
    [self popViewControllerAnimated:YES];
}

@end
时间: 2024-08-03 07:47:11

[BS-10] 统一设置app所有页面的“返回”按钮样式的相关文章

如何给magento的产品页面添加返回按钮

如何给magento的产品页面添加返回按钮,最模板提供教程 第一步: 打开 E:\xampp\htdocs\magento\skin\frontend\default\bluescale\css\styles.css 在底部添加返回按钮css代码,如下: /* Back Button */ .product-b 如何给magento的产品页面添加返回按钮,最模板提供教程 第一步: 打开 E:\xampp\htdocs\magento\skin\frontend\default\bluescale

关于微信页面的返回按钮

在实际的应用中,我们常常需要实现在移动app和浏览器中点击返回.后退.上一页等按钮实现自己的关闭页面.调整到指定页面或执行一些其它操作的 需求,那在代码中怎样监听当点击微信.支付宝.百度糯米.百度钱包等app的返回按钮或者浏览器的上一页或后退按钮的事件呢. 我相信很多朋友像我一样,在百度.搜狗里面搜索很久都没找到方法.下面就来告诉大家怎样监听的方法: 首先我们要了解浏览器的history.大家知道在页面中我们可以使用JavaScript window history,后退到前面页面,但是由于安全

设置二级导航栏的返回按钮

1. 一般情况下的导航栏跳转,当在一级界面跳转到二级界面的时候,左item的会出现 “返回箭头+一级导航栏的标题”: 比如说:一级导航栏是“白菜精华”,那么二级导航栏的返回键是 : 2. 当我们使用下方的代码(下方代码是在一级界面写)时,确实可以当跳转到二级界面的时候,左上角是“返回图标 + 返回”: self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"返回" style:UI

如何设置自定义导航控制器全局返回按钮 --- ios

怎么样可以一次性把导航控制器中的返回键全都自定义. 思路: 我们可以在push的时候来设置这个自定义按钮,push有一个方法 - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated{} 在这个方法中viewController是push的对象 但是要判断这个viewController是不是根控制器 - (void)pushViewController:(UIViewControl

ios 设置所有 导航控制器 的返回按钮 自定义导航按钮

应用场景: 1.当导航控制器push很多次,每个自控制器都需要自定义返回按钮,很麻烦 2.当进入二级界面以后,需要隐藏底部的tabbar 3.一次性设置顶部导航条的颜色 解决方法: 自定义导航控制器,重写push(跳到下一个控制器) 和 pop(返回上一个控制器) 方法 代码: #import "SGNavigationController.h" @interface SGNavigationController () @end @implementation SGNavigation

定义的返回按钮 Push到下一个页面后 手势返回无效解决办法

转自:http://zhangmingwei.iteye.com/blog/2080457 从iOS7的Beta版开始,就着手做兼容工作,到Beta4的時候,应用已经基本兼容,只是偶然发现,iOS样式的手势返回,也就是用interactivePopGestureRecognizer返回的时候,出现下面一些列问题.各方调研,无果,史无前例(废话,刚出来的7,上哪有例去--#). A,我的应用是自定义的返回按钮图标(默认返回按钮样式不会出现问题3),为了保险,写了这句代码[self.navigati

Servlet POST方法设置编码格式UTF-8(防止中文乱码,统一设置)

servlet的两个重要对象response和request分别代表返回客户的页面和接收来自客户的页面.这里面的字符内容往往涉及到不同的编码格式. 这里面编码格式的不同主要产生于如下几个地方: 1 js 2 jsp 3 Java source(编译器设置) 4 Web容器 5 HTML 上面每个地方都会有编码格式,为了支持中文字符,比较常见的做法就是都设置为UTF-8模式. 其中,response和request作为servlet对象的两个成员变量,其设置UTF-8是通过这两个对象的同名方法实现

Android: 设置 app 字体大小不跟随系统字体调整而变化

在做 app 内字体大小的需求,类似于 微信中设置字体大小. 那么就需要 app 不跟随系统字体大小调整而变化,找到了两个方法. 方法1: 重写 getResource() 方法,修改 configuration 为 setToDefaults() 1 /** 2 * 设置 app 不随着系统字体的调整而变化 3 */ 4 @Override 5 public Resources getResources() { 6 Resources resources = super.getResource

iOS: 设置App的国际化和本地化

原文链接:http://www.cocoachina.com/appstore/20160310/15632.html 前言 App的名字设置方式有很多种,如果在App打包上线时不做修改,最终App的名字就是Xcode在建立工程时的名字.好的习惯是工程建立时使用英文(pinyin),那么App也就是“英文”名字了,虽然Xcode也支持直接用中文命名工程(甚至是方法名……),但有时也会因此产生一些不必要的麻烦甚至莫名其妙的bug.本文主要介绍两种设置App名称的方法,第一种较为简单,第二种涉及简单