簡體   English   中英

iOS 5:如何實現自定義(圖像)后退按鈕

[英]iOS 5: How to implement a custom (image) back button

我已經在我的博客上完成了教程,所以我知道如何制作一個可以顯示底部(堆棧)viewcontroller標題的可伸縮按鈕。 但我希望做的是有圖標(比如HOME的房子),沒有文字,也沒有調整大小。

使用我的自定義圖像和下面的代碼,我得到一個拉伸版本(不想要),標題超過頂部(不想要),它點擊/突出顯示(很好);

UIImage *backButtonImage = [UIImage imageNamed:@"backButton_30.png"];
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

屏幕截圖1

現在,我在這里搜索並閱讀所有返回舊答案的類似問題,並為我做了奇怪的結果。 這是我試過的代碼;

  UIImage *backButtonImage = [UIImage imageNamed:@"backButton_30.png"];
  UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithImage:backButtonImage style:UIBarButtonItemStyleBordered target:nil action:nil];
  self.navigationItem.backBarButtonItem = backButton;

這個方法不會拉伸我的自定義圖像按鈕(很好),也沒有顯示文本(我想要的)但是它下面仍然有原始的藍色按鈕(WTF),並且我的自定義按鈕在點擊時不會着色,只有它下面的藍色按鈕呢!

屏幕截圖2

請幫忙,我錯過了什么?

*更新

我通過使用可調整大小的圖像來修復它。 這迫使它不要'伸展'

UIImage *backButtonHomeImage = [[UIImage imageNamed:@"backButtonHomeWhite_30.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonHomeImage  forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

要修復我必須要做的按鈕上顯示的標題

self.title =@" ";

現在這是一個骯臟的修復,但它似乎工作。 現在唯一的問題是我想在不同的視圖上使用不同的后退按鈕,這種方法會造成一些麻煩; 設置按鈕的最后一個視圖會覆蓋所有其他視圖。 因此,最終,根據您在應用程序中的導航方式,返回到上一個視圖時會出現錯誤的后退按鈕,並且它永遠不會重置為正確的后退按鈕。


更新2:潛在想法:

以下是一個合理的解決方案,還是一個容易破壞的黑客?

隱藏默認后退按鈕,就像這樣,

[self.navigationItem setHidesBackButton:YES animated:NO];

...然后使用自定義UIBarButtonItem,其中我實際想要放置在后退按鈕位置的樣式中的按鈕,在點擊時將popViewControllerAnimated:消息發送到UINavigationController。

如果您知道更強大的解決方案,請分享,謝謝。

假設您當前的解決方案

UIImage *backButtonHomeImage = [[UIImage imageNamed:@"backButtonHomeWhite_30.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonHomeImage  forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

您可以接受,因此唯一的問題是當您在視圖之間來回切換時如何更新該按鈕外觀,一種可行的方法是在每個控制器的viewWillAppear:方法中執行上面的代碼:

- (void)viewWillAppear:(BOOL)animated {
    UIImage *backButtonHomeImage = [[UIImage imageNamed:@"backButtonHomeWhite_30.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
    [[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonHomeImage  forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
}

如果您對當前使用自定義UIBarButtonItem的方法UIBarButtonItem ,那么可以使用initWithCustomView:初始化條形按鈕項initWithCustomView: 在這種情況下,您可以使用您喜歡的圖像指定例如UIImageView ,它應該可以工作:

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithCustomView:[UIImageView ...]];

希望這可以幫助。

對於iOS 5+,使用[[UIBarButtonItem appearance] setBackButtonBackgroundImage:[UIImage imageNamed:@"someimage.png"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]

我在項目中使用的一些代碼:

UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
UIImage *btnImg = [UIImage imageNamed:@"ButtonRetourInactive"];
[btn setImage:btnImg forState:UIControlStateNormal];

btn.frame = CGRectMake(0, 0, btnImg.size.width, btnImg.size.height);
[btn addTarget:self action:@selector(goBack:) forControlEvents:UIControlEventTouchUpInside];
self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:btn] autorelease];

注意,這適用於iOS 4和3。

如果您使用的是故事板,那就太容易了。 取一個圓形矩形按鈕並將其放在導航欄上。 然后雙擊按鈕(在選擇時,首先,它只顯示條形按鈕的屬性,但通過選擇兩次,您可以更改其所有屬性,就像您要自定義常規UI按鈕一樣)。

在這種情況下, UIAppearance

我試圖使用: - [UIBarButtonItem initWithCustomView:] 在這里你可以添加你的背景圖片和標題,無論你想要什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM