2010-02-24 152 views

回答

17

我在這一個方面與幾種方法摔跤,並最終使用來自多個來源的所有答案找出它。有幾個技巧;這個片段將顯示所有(我創建一個自定義rightNavButton,但你可以爲任何UIBarButtonItem容易適應這一點):

// Produces a nice "right arrow" style button that mirrors the back arrow 
// automatically added by the navController 
// 
UIImage *buttonImage = [UIImage imageNamed:@"forwardButton.png"]; 
UIButton *forwardButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
[forwardButton setBackgroundImage:buttonImage forState:UIControlStateNormal]; 
[forwardButton setTitle:@"Meter" forState:UIControlStateNormal]; 
forwardButton.font = [UIFont boldSystemFontOfSize:12]; 
forwardButton.frame = CGRectMake(0, 0, buttonImage.size.width, buttonImage.size.height); 
[forwardButton addTarget:self action:@selector(showMeter) 
      forControlEvents:UIControlEventTouchUpInside]; 

self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] 
      initWithCustomView:forwardButton]; 

注:事實證明,如果你想直接設定目標和行動上按鈕項目後,使用UIButton分配自定義視圖,它不會採取 - 你必須設置按鈕本身的目標和行動 - 顯然navBar使用逐字提供的按鈕。

這是我使用的不透明的黑色 navBar(你可以使用任何東西,很明顯)圖像: http://raretiger.com/images/forwardbutton.png

+3

您可以在這裏下載與Retina兼容的透明圖像:[link] http://handleopenurl.com/assets/docs/arrow-buttons.zip [/ link] 後退箭頭左側有15鍵,5 (正常大小的按鈕) – 2011-09-30 12:41:31

+2

你有一個內存泄漏,你分配'UIBarButtonItem''保留+1',然後將它分配給屬性'rightBarButtonItem''保留+1'。這意味着UIBarButtonItem現在的保留計數爲2,並且永遠不會被釋放。你需要自動釋放UIBarButtonItem: 'self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:forwardButton] autorelease];' – Camsoft 2012-01-16 10:29:41

+1

圖片鏈接消失了 – Esqarrouth 2014-03-03 11:23:44

4

您可以創建一個UIImageView的或用的UIButton所需要的圖像,然後使用:

[[UIBarButtonItem alloc] initWithCustomView: arrowButton]; 

希望這有助於。

7

製作自定義背景。有關如何參見Creating a left-arrow button (like UINavigationBar's "back" style) on a UIToolbar


您可能-pushNavigationItem:animated:使內置的後退按鈕出現,但你不能指定自定義操作它。


對於無證的方法,你可以使用

UIButton* backButton = [UIButton buttonWithType:101]; 

創建後退 「按鈕」。

+0

什麼是指向按鈕正向數字代碼? – ma11hew28 2010-09-04 06:56:27

+0

@Matt:這不是一個內置的按鈕類型。 – kennytm 2010-09-04 07:12:59

+5

快速入侵,有點太遲了:前進按鈕是一個帶有transform = scale(-1,1)並且其textLabel具有transform = scale(-1,1)的後退按鈕。 – Cyrille 2011-07-27 09:45:19

0

在繼續@Plamen Dragozov的想法:我注意到,如果你離開的UIButton的是,它觸摸時會觸發圖片調整,這與正常的導航後退按鈕完全相反。所以我所做的就是取消選中「突出顯示調整圖像」,它就像一個魅力。

希望這能幫助像我這樣的新手。

0

更優雅的解決方案:

UIBarButtonItem * backButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Title" style:UIBarButtonItemStylePlain target:self action:@selector(back:)]; 
[backButtonItem setBackgroundImage:[UIImage imageNamed:@"back.png"]  forState:UIControlStateNormal  barMetrics:UIBarMetricsDefault]; 
self.navigationItem.leftBarButtonItem = backButtonItem; 
0

我的問題是重命名該推視圖控制器上出現後退按鈕。我發現一個骯髒的解決方法,如果你忽略了非理想的動畫問題,你會得到一個帶你想要的標題的後退按鈕。在viewWillAppear

(不用說,在默認情況下,如果沒有leftBarButtonItem集,UINavigationController將呈現回

關鍵是要改變第一個VC稱號viewWillDisappear並重新設置課程與推動當前VC)

在你把你的當前VC對VC的VC的標題按鈕,做

-(void) viewWillDisappear:(BOOL) animated { 
    [super viewWillDisappear:animated]; 
    self.title = @"Back"; 
} 

-(void) viewWillAppear:(BOOL) animated { 
    [super viewWillAppear:animated]; 
    self.title = @"Original Title"; 
}