iphone - 用于后退按钮的自定义UIBarButtonItem

Den*_*nny 8 iphone uibarbuttonitem uinavigationitem

我想在导航栏中使用自定义项目作为后退按钮.

UIImage *backButtonImage = [UIImage imageNamed:@"backbutton.png"];
UIBarButtonItem *customItem = [[UIBarButtonItem alloc] initWithImage:backButtonImage style:UIBarButtonItemStylePlain target:nil action:nil];
[self.navigationItem setBackBarButtonItem: customItem];
[customItem release];
Run Code Online (Sandbox Code Playgroud)

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

返回键

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

Mos*_*she 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];
Run Code Online (Sandbox Code Playgroud)


Joh*_*rug 10

以Jorge的代码为基础,这是我的解决方案.

我创建了一个简单的类别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)

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


Max*_*eod 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];
Run Code Online (Sandbox Code Playgroud)

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