2012-05-29 23 views
0

當我的一個應用程序從一個控制器到另一個導航的「回去」的UIBarButtonItem消失,所以我寫代碼:如何顯示回去風格的UIBarButtonItem編程

 UIBarButtonItem *barButton1 = [[UIBarButtonItem alloc] initWithTitle:@"" 
                     style:UIBarButtonItemStyleDone 
                     target:self 
                     action:@selector(barButtonItemPressed:)]; 
     self.navigationItem.leftBarButtonItem = barButton1; 
     [barButton1 setImage:[UIImage imageNamed:@"fdj.png"]]; 
     [barButton1 release]; 

它的工作原理,但它顯示作爲

enter image description here

但我更喜歡的風格(如標準回去barbuttonitem

enter image description here

這可能嗎?

歡迎任何評論

+1

您可能需要使用精確的圖像(箭頭左邊)我想.. – Krishnabhadra

+0

使用自定義欄按鈕與確切圖像 –

回答

2

您應該編輯父視圖控制器的navigationItem

你可以把這個在前面視圖控制器的viewDidLoad

self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:nil style:UIBarButtonItemStylePlain target:nil action:nil] autorelease]; 
self.navigationItem.backBarButtonItem.image = [UIImage imageNamed:@"fdj.png"]; 
+0

也許在我的代碼有問題,這不適用於我既不: - ( – arachide

+0

只測試了代碼,它現在應該工作。 st從14min編輯。前。確保你把代碼放在** PARENT ** viewcontroller中。父級是viewcontroller,它推動您想要更改後退按鈕的viewcontroller。 – rckoenes

0

這裏是代碼如何做到這一點

UIButton *btnBack = [UIButton buttonWithType:UIButtonTypeCustom]; 
btnBack.frame = CGRectMake(0, 0, 55, 36); 
[btnBack setImage:[UIImage imageNamed:@"btnBack"] forState:UIControlStateNormal]; 
[btnBack setImage:[UIImage imageNamed:@"btnBack"] forState:UIControlStateSelected]; 
[btnBack addTarget:self action:@selector(onClickBack) forControlEvents:UIControlEventTouchUpInside]; 

UIBarButtonItem *item4 = [[UIBarButtonItem alloc] initWithCustomView:btnBack]; 

self.navigationItem.leftBarButtonItem = item4; 

只是製作圖像並將其設置在uibutton中,這是實現此目的的簡單方法。 你可以設置你想要的任何圖像。 希望這可以幫助你想要什麼。

+0

錯誤的答案。有一個確定的方式來做到這一點 - 而這不是它。 –

0

視圖控制器的init方法,設置

self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] initWithImage: [UIimage imageNamed: @"fdj.png"] 
                      style: UIBarButtonItemStyleBordered 
                     target: nil 
                     action: nil] autorelease]; 
+0

如果我的回答有問題,請告訴我,以便我可以更正。 –

+0

2 downvotes!來吧,讓我充滿...答案有什麼問題? –

-2

這是我用了我的一箇舊的項目是什麼(是的,我知道,stretchableImageWithLeftCapWidth已過時)。

@implementation UIViewController (UIView_ExtenderClass) // this is a category, obviously 

... 

-(void)setLeftButton:(id)theTarget navItem:(UINavigationItem *)myNavItem action:(SEL)myAction title:(NSString *)myTitle; 
{ 
    CGSize titleWidth = [myTitle sizeWithFont:[UIFont boldSystemFontOfSize:14.0]]; 
    UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, titleWidth.width + 20, 32)]; 
    [button setTitle: [NSString stringWithFormat:@" %@", myTitle] forState:UIControlStateNormal]; 
    button.titleLabel.font = [UIFont boldSystemFontOfSize:14.0]; 

    [button addTarget:theTarget action:myAction forControlEvents:UIControlEventTouchUpInside]; 

    UIImage *imgBack = [UIImage imageNamed:@"32_left_nav_bar.png"]; 
    UIImage *imgBackStretched = [imgBack stretchableImageWithLeftCapWidth:15 topCapHeight:0]; 
    UIImage *imgBackSelected = [UIImage imageNamed:@"32_left_nav_bar_selected.png"]; 
    UIImage *imgBackSelectedStretched = [imgBackSelected stretchableImageWithLeftCapWidth:15 topCapHeight:0]; 

    [button setBackgroundImage:imgBackStretched forState:UIControlStateNormal]; 
    [button setBackgroundImage:imgBackSelectedStretched forState:UIControlStateHighlighted]; 

    UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc] initWithCustomView:button]; 
    [buttonItem setTarget:theTarget]; 

    myNavItem.leftBarButtonItem = nil; 
    myNavItem.leftBarButtonItem = buttonItem; 

    [imgBack release]; 
    [imgBackSelected release]; 

    [button release]; 
    [buttonItem release]; 
} 

稱它爲第二控制器的viewDidLoad,就像這樣:

[self setLeftButton:self navItem:self.navigationItem action:@selector(yourActionHere) title:@"Back"] 

我使用的圖像是在這裏:http://i49.tinypic.com/6qfzfs.png

+0

爲什麼使用'self.navigationItem.backBarButtonItem'屬性直接從父視圖控制器返回按鈕上的圖像時使用這種方式? – rckoenes