UINavigationController中的自定义后退按钮

pgb*_*pgb 18 iphone uinavigationcontroller

对于我正在开发的应用程序,我需要在导航栏中显示自定义后退按钮.我将按钮资源作为PNG图像,我正在编写此代码:

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom];
    backButton.frame = CGRectMake(0, 0, 79, 29.0);
    [backButton setImage:[UIImage imageNamed:@"button_back.png"] forState:UIControlStateNormal];
    self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:backButton] autorelease];
Run Code Online (Sandbox Code Playgroud)

}

当我按下这个视图控制器时,自定义按钮不显示,而是我得到标准的后退按钮,里面有这个视图控制器的标题.

我已经尝试过的事情:

  1. backButton通过将按钮添加到视图层次结构,可以加倍检查按钮是否已正确创建.它显示正常.
  2. 在同一方法中,更改了title属性navigationItem并确认它更改(按预期)我的后退按钮的内容.

谁能发现我做错了什么?有没有人成功使用自定义图像作为后退按钮UINavigationController

Mat*_*s R 18

从iOS 5开始,这很简单:

[[UIBarButtonItem appearance]
            setBackButtonBackgroundImage:[UIImage imageNamed:@"back_button.png"]
            forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
Run Code Online (Sandbox Code Playgroud)

您可以将其放置在应用程序委托中,它会将背景图像设置为应用程序中的所有后退按钮(当然,对于该控件状态和条形指标).

  • 这并没有隐藏后门的标题 (28认同)
  • 有什么方法可以隐藏后门的标题? (5认同)

Joh*_*rug 13

我将从/sf/answers/1178203771/重新发布我的解决方案:

我创建了一个简单的类别UIViewController:

的UIViewController + ImageBackButton.h

#import <UIKit/UIKit.h>

@interface UIViewController (ImageBackButton)

- (void)setUpImageBackButton;

@end
Run Code Online (Sandbox Code Playgroud)

的UIViewController + ImageBackButton.m

#import "UIViewController+ImageBackButton.h"

@implementation UIViewController (ImageBackButton)

- (void)setUpImageBackButton
{
    UIButton *backButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 34, 26)];
    [backButton setBackgroundImage:[UIImage imageNamed:@"back_arrow.png"] forState:UIControlStateNormal];
    UIBarButtonItem *barBackButtonItem = [[UIBarButtonItem alloc] initWithCustomView:backButton];
    [backButton addTarget:self action:@selector(popCurrentViewController) forControlEvents:UIControlEventTouchUpInside];
    self.navigationItem.leftBarButtonItem = barBackButtonItem;
    self.navigationItem.hidesBackButton = YES;
}

- (void)popCurrentViewController
{
    [self.navigationController popViewControllerAnimated:YES];
}

@end
Run Code Online (Sandbox Code Playgroud)

现在,您只需要#import UIViewController+ImageBackButton.h在所有视图控制器中或在其他视图控制器继承的自定义基本视图控制器类中实现该viewWillAppear:方法:

- (void)viewWillAppear:(BOOL)animated
{
    [self setUpImageBackButton];
}
Run Code Online (Sandbox Code Playgroud)

就这样.现在到处都有一个图像后退按钮.没有边界.请享用!


pgb*_*pgb 5

backBarButtonItem属性按预期工作,但它将始终根据导航栏色调颜色添加其标准按钮形状和颜色.

您可以自定义文本,但不能替换图像.

正如Andrew Pouliot建议的那样,一种解决方法是使用leftBarButtonItem,但我坚持使用标准按钮.