重载 UINavigationController 设置左侧返回按钮的文字为图片

UINavigationController

导航栏控制器的左侧返回按钮如果需要设置成图片,仅使用系统的是无法实现的,需要重载系统的导航栏控制器,在控制器推出之前替换掉leftBarButtonItem才行.

注:以下链接的这个哥们对NavigationViewController所有能做的定制都解说了

http://beyondvincent.com/blog/2013/11/03/120-customize-navigation-status-bar-ios-7/#5

源码如下:

CustomNavigationViewController.h + CustomNavigationViewController.m

 

#import <UIKit/UIKit.h>

@interface CustomNavigationViewController : UINavigationController

@end

#import "CustomNavigationViewController.h"

#pragma mark - 支持ARC与非ARC
#if __has_feature(objc_arc)
#define RELEASE(obj)
#define AUTO_RELEASE(obj)
#else
#define Release(obj)      [obj release]
#define Autorelease(obj)  [obj autorelease]
#endif

//判断是否是iOS7
#define iOS7 \
([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)

@interface CustomNavigationViewController ()

@end

@implementation CustomNavigationViewController

#pragma mark - 重载父类进行改写
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    //先进入子Controller
    [super pushViewController:viewController animated:animated];

    //替换掉leftBarButtonItem
    if (viewController.navigationItem.leftBarButtonItem== nil && [self.viewControllers count] > 1) {
        viewController.navigationItem.leftBarButtonItem =[self customLeftBackButton];
    }
}

#pragma mark - 自定义返回按钮图片
-(UIBarButtonItem*)customLeftBackButton{

    UIImage *image = [UIImage imageNamed:@"back.png"];

    UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom];

    backButton.frame = CGRectMake(0, 0, image.size.width, image.size.height);

    [backButton setBackgroundImage:image
                          forState:UIControlStateNormal];

    [backButton addTarget:self
                   action:@selector(popself)
         forControlEvents:UIControlEventTouchUpInside];

    UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithCustomView:backButton];
    Autorelease(backItem);

    return backItem;
}

#pragma mark - 返回按钮事件(pop)
-(void)popself
{
    [self popViewControllerAnimated:YES];
}

#pragma mark - 用图片设置导航背景
+ (void)initialize
{
    //取出设置主题的对象
    UINavigationBar *navBar = [UINavigationBar appearance];

    //设置导航栏的背景图片
    NSString *navBarBg = nil;
    if (iOS7)
    {
        navBarBg = @"NavBar64";
        navBar.tintColor = [UIColor whiteColor];
    }
    else
    {
        navBarBg = @"NavBar";
        [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
    }
    [navBar setBackgroundImage:[UIImage imageNamed:navBarBg] forBarMetrics:UIBarMetricsDefault];

    //标题颜色
    [navBar setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]}];
}

@end

 

时间: 2024-10-31 21:50:25

重载 UINavigationController 设置左侧返回按钮的文字为图片的相关文章

自定义iOS7导航栏背景,标题和返回按钮文字颜色

在iOS7下,默认导航栏背景,颜色是这样的,接下来我们就进行自定义,如果你仅仅是更改一下背景和颜色,代码会很简单,不需要很复杂的自定义View来替代leftBarItem 更改导航栏的背景和文字Color 方法一: [objc] view plaincopy //set NavigationBar 背景颜色&title 颜色   [self.navigationController.navigationBar setBarTintColor:[UIColor colorWithRed:20/25

ios开发Swift修改导航栏“返回”按钮文字,图标

项目中常常会使用 UINavigationController 对各个页面进行导航,导航栏左侧的返回按钮默认标题文字是上级页面的title. 但如果上级页面的标题很长,那么这个返回按钮字很多就会很丑:    开发Swift修改导航栏"返回"按钮文字,图标-swift 导航栏返回按钮">      当文字极其长时返回文字就会变成"back":         一,要修改"返回按钮"的文字,有如下两种方式: 1,在父页面中设置 将na

Swift之导航栏标题文字太长,导致返回按钮文字消失问题解决

项目中常常会使用 UINavigationController 对各个页面进行导航,导航栏左侧的返回按钮默认标题文字是上级页面的 title. 但如果子页面的标题(title)文字过长,那么返回按钮的文字就会消失:   同样地,即使在父页面中将 navigationItem.backBarButtonItem 设为自定义的 UIBarButtonItem,修改返回按钮的文字:   如果子页面的标题文字过长,返回按钮的文字也是就会消失:   解决办法:将导航栏标题视图替换成自定义label,并限制

关于iOS导航栏返回按钮问题的解决方法_IOS

最近遇到一个关于导航栏返回按钮的问题,因为之前项目里面都是用的系统默认的返回按钮样式所以没有想过要去更改,后来有需要将返回按钮箭头旁边的文字去掉,同时将该返回按钮的点击事件重新定义.一开始尝试自定义按钮然后设置为leftBarButtonItem,但是这样图片可能跟系统自带的不一样,还有就是返回按钮的位置跟系统自带的不一样.后来找了一些资料,发现将文字去掉比较简单,一般做法是控制器中添加如下代码,然后他的下一级控制就有一个只有箭头没有文字返回按钮: 复制代码 代码如下: UIBarButtonI

ios开发之Swift UIPasteboard剪贴板的使用详解(复制、粘贴文字和图片)

UITextField.UITextView组件系统原生就支持文字的复制,但有时我们需要让其他的一些组件也能实现复制功能,比如点击复制UILabel上的文字.UIImageView中的图片.UITableView里单元格的内容.或者点击按钮把文字或图片自动复制到粘贴板中等等. 这些我们借助 UIPasteboard 就可以实现. 一,将内容写入到剪贴板中 1,复制字符串 UIPasteboard.generalPasteboard().string = "欢迎访问 hangge.com"

iOS中常用设置返回按钮_IOS

//添加返回按钮 -(void)backBtn{ UIButton *backBtn=[[UIButton alloc]initWithFrame:CGRectMake(0, 10, 60, 20)]; [backBtn setTitle:@"返回" forState:UIControlStateNormal]; backBtn.titleLabel.font=[UIFont systemFontOfSize:12]; backBtn.imageEdgeInsets=UIEdgeIns

iOS如何把导航默认的返回按钮设置成“返回”

- (void)addBackItemWithAction:(SEL)action { if (IOS7_OR_LATER) { UIBarButtonItem *returnButtonItem = [[UIBarButtonItem alloc] init]; returnButtonItem.title = @"返回"; self.navigationItem.backBarButtonItem = returnButtonItem; } else { // 设置返回按钮的文本

移动应用设计:谈导航栏返回按钮的替代方案

呼,又要夜间上新了.其实自己偶尔还会进去关于Be For Web里面看看将近两年前写的博客开篇语.当时的动力现在仍在,当时爱的那个世界现在仍在爱,并且越来越让我觉得自豪;这让我开心了些.周六晚上有在喝冰啤酒的兄弟姐妹吗,有的话我们虚拟碰个杯吧先,周末愉快=) 前面连续做了13篇iOS7预发布版界面设计规范,这周开始重新回到正常节奏,上一些小文.今次的小话题是关于返回按钮的;其实还少谈了一种越来越普及的替代方案,也就是将返回按钮做到底部标签栏或是工具栏最左侧;当然,准确的说,这种情况下容器本身也不

IOS 改变导航栏返回按钮的标题

  IOS 改变导航栏返回按钮的标题   下午又找到了一个新的方法 这个方法不错 暂时没有发现异常的地方.    新写的App中需要使用UINavigationController对各个页面进行导航,但由于第一级页面的title较长,在进入第二级页面后返回按钮leftButtonItem的title就会变得很长,对NavigationBar空间占用很大,而且不美观,于是使用代码对leftButtonItem的title文本进行修改,无论是设置self.navigationItem.leftBar