2011-01-30 95 views
7

我想在導航欄中使用後退按鈕的自定義項目。iphone - 後退按鈕的自定義UIBarButtonItem

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

我最終得到的是帶有邊框的圖像。它看起來像這樣(我的圖片是後退按鈕):

Back Button

如何才能擺脫邊框的?我究竟做錯了什麼?

回答

9

您的圖像出現在後退按鈕的內部,顯然(從您的屏幕截圖)與後退按鈕的大小不一樣。

您可能想要隱藏後退按鈕,然後將其替換爲「左側欄按鈕」。

代碼:

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

感謝您的回答。我嘗試了不同的圖像尺寸,但沒有一個能夠工作。我總是在縮放的圖像周圍找到邊框。如果我使用LeftBarButtonItem而不是BackBarButtonItem,會發生類似的情況。你是否知道任何包含工作映像和代碼的示例項目? – Denny 2011-01-30 19:24:52

+0

不,我不知道有任何項目,但今晚我可能會嘗試把它們放在一起。 – Moshe 2011-01-30 19:34:03

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項目,所以對象上沒有版本等。

+1

非常感謝。這正是我需要的,這是我在其他地方找不到的。 – James 2012-07-25 21:58:38

1

我創建了一個UINavigationBar的類別,我在每個viewControllers中調用viewWillAppear。我用它來改變我的後退按鈕的外觀的代碼如下:完美的iOS 6下

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; 

作品

10

大廈豪爾赫的代碼,這是我的解決方案。

我上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 

現在,所有你需要做的在你所有的v中都是#import UIViewController+ImageBackButton.h IEW控制器或自定義基本視圖控制器類,您的其他視圖控制器繼承並實現viewWillAppear:方法:

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

這就是全部。現在你有一個圖像後退按鈕。沒有邊界。請享用!