8

我正在尝试为导航栏中的后退按钮使用自定义项目。

UIImage *backButtonImage = [UIImage imageNamed:@"backbutton.png"];
UIBarButtonItem *customItem = [[UIBarButtonItem alloc] initWithImage:backButtonImage style:UIBarButtonItemStylePlain target:nil action:nil];
[self.navigationItem setBackBarButtonItem: customItem];
[customItem release];

我最终得到的是带有边框的图像。它看起来像这样(我的图像是后退按钮):

返回键

我怎样才能摆脱边界?我究竟做错了什么?

4

4 回答 4

10

您的图像出现在后退按钮内,并且显然(从您的屏幕截图中)与后退按钮的大小不同。

您可能想要隐藏后退按钮,然后将其替换为“左栏按钮”。

代码:

UIImage *backButtonImage = [UIImage imageNamed:@"backbutton.png"];
UIBarButtonItem *customItem = [[UIBarButtonItem alloc] initWithImage:backButtonImage style:UIBarButtonItemStylePlain target:self.navigationController action:@selector(popViewControllerAnimated:)];
[self.navigationController setHidesBackButton:YES];
[self.navigationItem setLeftBarButtonItem: customItem];
[customItem release];
于 2011-01-30T18:15:18.127 回答
10

基于 Jorge 的代码,这是我的解决方案。

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

UIViewController+ImageBackButton.h

#import <UIKit/UIKit.h>

@interface UIViewController (ImageBackButton)

- (void)setUpImageBackButton;

@end

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

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

- (void)viewWillAppear:(BOOL)animated
{
    [self setUpImageBackButton];
}

就这样。现在你到处都有一个图像后退按钮。无国界。享受!

于 2013-05-30T08:37:11.900 回答
6

这是一个更新的版本。这包括设置目标、字体大小等。

此外,它反映了setHidesBackButton不能作为 的属性使用navigationController

UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom];
UIImage *backButtonBackgroundImg = [UIImage imageNamed:@"BackButton.png"];
backButton.frame = CGRectMake(0.0f, 0.0f, backButtonBackgroundImg.size.width, backButtonBackgroundImg.size.height);
[backButton setBackgroundImage:backButtonBackgroundImg forState:UIControlStateNormal];
[backButton addTarget:self action:@selector(didTouchUpInsideBackButton:) forControlEvents:UIControlEventTouchUpInside];
backButton.titleLabel.font = [UIFont boldSystemFontOfSize:[UIFont smallSystemFontSize]];
[backButton setTitle:@"MyTitle" forState:UIControlStateNormal];

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:backButton];

请注意,这是来自 ARC 项目,因此对象上没有发布等。

于 2012-04-20T13:58:48.277 回答
1

我创建了一个 UINavigationBar 类别,我在每个 viewController 中的 viewWillAppear 中调用它。我用来更改后退按钮外观的代码如下:

UIButton *backButton = [[UIButton alloc] initWithFrame:CGRectMake( your button frame)];
[backButton setBackgroundImage:[UIImage imageNamed:@"your image name"] forState:UIControlStateNormal];
UIBarButtonItem *barBackButtonItem = [[UIBarButtonItem alloc] initWithCustomView: backButton];
[backButton addTarget:delegate action:@selector(backButtonPressed) forControlEvents:UIControlEventTouchUpInside];
self.topItem.leftBarButtonItem = barBackButtonItem;
self.topItem.hidesBackButton = YES;

在 iOS 6 下完美运行。

于 2012-12-03T17:13:43.717 回答