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

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];
}
时间: 2024-08-04 09:39:13

设置二级导航栏的返回按钮的相关文章

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

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

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

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

导航栏的返回按钮自定义文字

在上一个界面添加如下代码,下一个界面的返回按钮就会改变: //------UIBarButtonItem *backItem = [[UIBarButtonItem alloc]initWithTitle:@"自定义" style:UIBarButtonItemStylePlain target:nil action:nil]; self.navigationItem.backBarButtonItem = backItem;

自定义导航栏的返回按钮

UIBarButtonItem *left = [[UIBarButtonItem alloc] initWithTitle:@"返回3" style:UIBarButtonItemStyleDone target:self action:@selector(onBack:)]; self.navigationItem.leftBarButtonItem = left; //另外自定义的按钮后 就不能使用自带的右滑返回手势,参考//http://blog.sina.com.cn/s/b

修改导航栏上返回按钮上的字,例如把back修改为返回

注意:这个需要在跳转之前到视图控制器中写,而不是在跳转之后到控制器中写 UIBarButtonItem *backIetm = [[UIBarButtonItem alloc] init]; backIetm.title = @"返回"; self.navigationItem.backBarButtonItem = backIetm;

iOS之修改导航栏的返回按钮的文本

A -> B,大概有2种方法: 1)在push的时候,在A中添加代码: UIBarButtonItem *backItem = [[UIBarButtonItem alloc] init]; backItem.title = @"你的文字"; self.navigationItem.backBarButtonItem = backItem; 2)在B中添加代码: UIBarButtonItem *item = (UIBarButtonItem *)self.navigationC

iOS 自定义导航栏的返回按钮

UIBarButtonItem * item  =    [UIBarButtonItem appearance]; UIImage* image = [UIImage imageNamed:@"back_icon"]; [item setBackButtonBackgroundImage:[image resizableImageWithCapInsets:UIEdgeInsetsMake(0, image.size.width, 0, 0)] forState:UIControlS

html css二级导航栏

二级导航栏制作: 1.将一级导航栏去除列表样式(list-style:none),并给予浮动,使其横向排列(float:left) 2.给每个li中添加一个<a></a>标签,给a设置样式,使其成为块级元素( display:block),这样只需要点击当前 li 范围区域即可触发a的跳转 3.给需要添加二级导航栏的li里面添加 ul>li ,给个类名,设置其样式为(display:none),使其在普通情况下隐藏 4.设置一级导航栏划过效果,当滑到有二级导航栏的 li 时,

设置全局导航栏颜色,标题大小和UIBarButtonItem字体大小

设置全局导航栏颜色,标题大小和UIBarButtonItem字体大小 在appdelegate里面设置 swift: UINavigationBar.appearance().barTintColor = UIColor.init(red: 47, green: 48, blue: 52) UINavigationBar.appearance().tintColor = UIColor.whiteColor() UINavigationBar.appearance().titleTextAttr