2013-06-03 137 views
3

我需要根據設計師的計劃創建一個navBar後退按鈕。後退按鈕有一個圖案圖像和周圍縫合的皮革。UINavigationBar後退按鈕與圖案圖像

這就是:

enter image description here

我的問題是有可能沒有麻煩和頭痛的大量產生呢?或者,如果可能的話,因爲後退按鈕的寬度不一樣?

謝謝!

UPDATE

好吧,有PartiallyFinite的幫助,原來,這是很容易的。如果你正確設置了UIEdgeInsets,它會保持左側固定,右側固定,然後考慮後退按鈕的寬度複製圖像的中間部分。

這是我用我的後退按鈕圖像:

enter image description here

這些都是我的插圖設置。你可以自己試試:

backButtonImage = [backButtonImage resizableImageWithCapInsets:UIEdgeInsetsMake(5, 17, 5, 12)]; 

希望這可以幫助未來的人。

+0

創建自定義的UIBarButtonItem – NANNAV

+0

看看我的代碼對你有幫助... – Jitendra

回答

4

您需要提供拉伸圖像的按鈕,所以它知道如何正確地顯示出來:

UIImage *buttonImage = [[UIImage imageNamed:@"backButtonImage"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 15, 0, 6)] 

你不需要做什麼特別的圖像本身,而是你需要指定適當的邊緣插入用於可調整大小的圖像,以指示圖像邊緣周圍應該不被拉伸的區域,如上所示(該示例顯示了左側15像素和右側6像素的插圖) 。該區域應該覆蓋箭頭和彎曲的右邊緣,以便中間區域可以根據需要伸出。有關此方法的更多信息,請參閱Read the documentation

UPDATE:默認情況下,圖像的可調整大小的區域將被平鋪到新的大小,但是如果你想擁有它,而不是舒展,你可以使用resizableImageWithCapInsets:resizingMode:並通過UIImageResizingModeStretch實現這一行爲。對於你的情況,很明顯平鋪會更好,因爲它可以保留拼接,但對於某些背景圖像,拉伸是更好的解決方案。只是把這個放在這裏來幫助任何未來看到這個的人。

一旦你的伸展圖像,您可以使用此代碼更改外觀後退按鈕:

[myBackButtonItem setBackButtonBackgroundImage:buttonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

或者,您可以爲應用中的所有後退按鈕使用此代碼設置此定製外觀:

[[UIBarButtonItem appearance] setBackButtonBackgroundImage:buttonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

運行此應用程序啓動時,它會影響您的應用程序中的所有後退按鈕。

請注意,與其他一些答案暗示的不同,您不需要手動創建任何後退按鈕。如果您創建UINavigationController並以推薦的方式使用它(請參閱in the documentation,當您使用pushViewController:animated:推視圖控制器時,將爲您創建一個導航欄和後退按鈕。如果使用全局UIAppearance代碼段應用自定義的按鈕樣式,它會自動應用到你所有的後退按鈕。

你可以閱讀更多關於setBackButtonBackgroundImage:forState:barMetrics:in the official documentation

也有可以在網上如何更深入的解釋許多教程這工作和如何做到這一點,這裏有幾個很好的:

0

您需要創建自己的BarButtonItem。您無法爲系統後退按鈕設置圖像。

self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:buttonWithYourImage] autorelease]; 
+0

這並不是當這可以很容易地與外觀的API來完成一個很好的解決方案。 – Greg

+0

可能:)但據我瞭解,外觀會影響應用程序中所有barButton項目。我認爲這種行爲不受歡迎的情況在哪裏:) – xexe

+0

您可以使用'setBackButtonBackgroundImage:forState:barMetrics:'方法爲單個按鈕設置外觀,並且不需要製作自定義視圖按鈕。 – Greg

0

您可以創建自己的UIBarButtonItem並將其設置爲leftButtonItem導航欄上當前視圖控制器:

UIBarButtonItem *btn = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"your_image"] style:UIBarButtonItemStyleBordered target:self action:@selector(yourFunction:)]; 
self.navigationItem.leftBarButtonItem = btn; 
0

我用這個在我Appdelegate.m自定義按鈕。 (「buttonBack」是您的圖像的名稱)。希望它可以幫助你

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{  
UIImage *barButtonImage = [[UIImage imageNamed:@"buttonBack"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 6, 0, 6)]; 
[[UIBarButtonItem appearance] setBackgroundImage:barButtonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

return YES; 
} 
0

首先,你需要讓自己的背部..按鈕,並設置圖像後退按鈕。

UIBarButtonItem * btn=[[UIBarButtonItem alloc]initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:self action:@selector(changed)]; 

self.navigationItem.leftBarButtonItem=btn; 

[btn setImage:[UIImage imageNamed:@"yourimagename"]]; 


-(void)changed 
{ 


    [self.navigationController popToViewController:[[self.navigationController viewControllers] objectAtIndex:0] animated:YES]; 

} 

嘗試這樣一來,你真的很有幫助...

+0

如果使用導航控制器,則會自動創建後退按鈕。您不需要手動創建並將其分配給導航欄。 – Greg