iphone-后退按钮的自定义UIBarButtonItem

iphone-后退按钮的自定义UIBarButtonItem,iphone,uibarbuttonitem,uinavigationitem,Iphone,Uibarbuttonitem,Uinavigationitem,我正在尝试为导航栏中的“后退”按钮使用自定义项 UIImage *backButtonImage = [UIImage imageNamed:@"backbutton.png"]; UIBarButtonItem *customItem = [[UIBarButtonItem alloc] initWithImage:backButtonImage style:UIBarButtonItemStylePlain target:nil action:nil]; [self.navigationIt

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

UIImage *backButtonImage = [UIImage imageNamed:@"backbutton.png"];
UIBarButtonItem *customItem = [[UIBarButtonItem alloc] initWithImage:backButtonImage style:UIBarButtonItemStylePlain target:nil action:nil];
[self.navigationItem setBackBarButtonItem: customItem];
[customItem release];
我最终得到的是一个有边框的图像。它看起来像这样(我的图像是后退按钮):


我怎样才能摆脱边境?我做错了什么?

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

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

代码:

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];

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

此外,它还反映了
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项目,因此对象上没有发布等。

我创建了一个UINavigationBar类别,我在VIEW中调用它,它将显示在我的每个VIEW控制器中。我用于更改“后退”按钮外观的代码如下:

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下运行非常完美。

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

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

UIViewController+ImageBackButton.h

#import <UIKit/UIKit.h>

@interface UIViewController (ImageBackButton)

- (void)setUpImageBackButton;

@end
现在,您只需在所有视图控制器或其他视图控制器继承的自定义基本视图控制器类中导入UIViewController+ImageBackButton.h
,并实现
视图将显示:
方法:

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

就这些。现在到处都有图像返回按钮。没有边界。享受吧

谢谢你的回答。我尝试了不同的图像大小,但没有一个有效。我的缩放图像周围总是有一个边框。如果我使用LeftBarButtonItem而不是BackBarButtonItem,也会发生类似的情况。你知道任何包含工作图像和代码的示例项目吗?不,我不知道有任何项目,但我可能会在今晚晚些时候尝试将其组合在一起。非常感谢。这正是我所需要的,我在别处找不到。这是一个很好的解决方案。我想知道是否有一种方法可以动态检测标准的后退按钮何时出现在屏幕上,以防止每次都必须覆盖视图。@IvanLesko这是个好问题。我相信一定有办法。如果您感到绝望,而其他一切都失败了,您可以迭代UINavigationBar的子视图。但这应该是最后的手段:)
- (void)viewWillAppear:(BOOL)animated
{
    [self setUpImageBackButton];
}