2013-05-11 68 views
7

我將一個箭頭自定義圖像設置爲導航欄,通過在應用程序委託中添加以下代碼,它可以工作,但現在我正在尋找完全刪除後退按鈕的文本。如何從Xcode中的導航欄上的後退按鈕中刪除文本?

UIImage * backButtonImage = [UIImage imageNamed: @"BackButtonGrey.png"]; 
backButtonImage = [backButtonImage stretchableImageWithLeftCapWidth: 15.0 topCapHeight: 30.0]; 
[[UIBarButtonItem appearance] setBackButtonBackgroundImage: backButtonImage forState: UIControlStateNormal barMetrics: UIBarMetricsDefault]; 

回答

5

我只是做它像這樣,工作得很好,我:-)

UIImage *backButtonImage = [UIImage imageNamed:@"navigationBarBack.png"]; 
UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom]; 

[backButton setImage:backButtonImage 
      forState:UIControlStateNormal]; 

backButton.frame = CGRectMake(0, 0, backButtonImage.size.width, backButtonImage.size.height); 

[backButton addTarget:self 
       action:@selector(popViewController) 
    forControlEvents:UIControlEventTouchUpInside]; 

UIBarButtonItem *backBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:backButton]; 
self.navigationItem.leftBarButtonItem = backBarButtonItem; 
+1

我想嘗試做在應用程序委託所以它改變了粘貼的全局,而不是該代碼上的每個控制器類。 – ASH 2013-05-11 20:18:08

+0

您可以繼承UIViewController,在其中添加代碼並將這個類用於您的控制器。 – d4Rk 2013-05-11 20:21:12

+0

現在它使用您的編輯時崩潰。 – ASH 2013-05-11 20:31:52

1

不要使用外觀代理。相反,視圖控制器,把這段代碼到其viewDidLoad實現:

UIImage * backButtonImage = 
    [UIImage imageNamed: @"BackButtonGrey.png"]; 
backButtonImage = 
    [backButtonImage stretchableImageWithLeftCapWidth: 15.0 topCapHeight: 30.0]; 

UIBarButtonItem* b = 
    [[UIBarButtonItem alloc] 
      initWithImage:backButtonImage 
      style:UIBarButtonItemStylePlain target:nil action:nil]; 
self.navigationItem.backBarButtonItem = b; 

這將導致推送到導航堆棧有隻包含一個圖像的後退按鈕下一個視圖控制器。

(不過,我要指出的是stretchableImageWithLeftCapWidth:...已經過時了。你應該使用resizableImage...。)

+0

然後,你沒有按照我所說的去做。我使用這個代碼,我的後退按鈕很好。 – matt 2013-05-11 22:42:44

+0

我試過使用你的代碼,但我以相同的普通後退按鈕結束,沒有任何自定義 – ASH 2013-05-12 03:13:21

+0

請仔細閱讀我的答案。如果在視圖控制器A中有該代碼,則在視圖控制器A的視圖中,您將看到後退按鈕* not *,但在視圖控制器B被推入視圖控制器A時,視圖控制器B的視圖中會顯示該按鈕。 – matt 2013-05-12 04:00:18

9

只需將文本垂直到目前爲止,它不再出現。這可以在應用程序代理中的應用程序啓動時完成。

[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, 20.f) forBarMetrics:UIBarMetricsDefault]; 

通常這個調用是調整垂直文本的位置,它可以根據使用的字體而變化。在這裏,文本被移動得足夠遠以至於它不再位於後退按鈕視圖內,因此被裁剪爲不存在。

+1

代替「7」 ,「-50」對我來說訣竅 – Zee 2014-01-29 10:11:25

+3

據我所知,這並不會對當前視圖控制器標題的偏移量做任何事情。 – 2014-05-20 21:51:10

+0

Yup同意@ Ronny-AndréBendiksen - 這仍然會導致很長的遊戲得到抵消,這看起來很奇怪 – Andy 2016-11-22 17:11:21

6
[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(-100.f, 0) forBarMetrics:UIBarMetricsDefault]; 
+1

UIOffsetMake(-100.f,0) 這並不好 - 如果你將按照標準進入這個視圖控制器推,你會看到移動的文字,而動畫。更好的可能是,例如: UIOffsetMake(-100.f,-5000.f) – Reconquistador 2014-10-13 07:47:14

+0

它的工作原理。謝謝你 – Kit 2015-05-21 03:18:04

9

我真的不認爲這是一個開發商調整文字的偏移,以隱藏它一個很好的做法。

一個更清潔的解決方案是隻需嚮導航控制器後退按鈕添加一個標題爲空字符串的新按鈕。你應該在viewWillAppear中以前調用視圖控制器(不是當前)補充一點:

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil]; 
self.navigationItem.backBarButtonItem = backButton; 
+3

這是唯一的答案,最終爲我工作。確保你注意*你應該在前面的調用視圖控制器*中添加它! – Joe 2015-09-20 00:58:20

+0

這是最好的答案! – Andy 2016-11-22 17:11:06

0
UIBarButtonItem *newBackButton = 
[[UIBarButtonItem alloc] initWithTitle:@"" 
           style:UIBarButtonItemStylePlain 
           target:nil 
           action:nil]; 
[[self navigationItem] setBackBarButtonItem:newBackButton]; 
-1

完美的解決方案在全球範圍

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 

    UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName:UIColor.clearColor()], forState: UIControlState.Normal) 
    UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName:UIColor.clearColor()], forState: UIControlState.Highlighted) 

    return true 
} 
1

要設置後退按鈕的文字,您可以設置一個新的後退按鈕到當前視圖控制器之前推或呈現然後顯示新的一個將顯示背景文本的文本:

在您當前的viewController(而不是新的將顯示back-按鈕):

vc         = [[MyNewViewController alloc]initWith...]; 
vc.title        = @"New ViewController"; 
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil]; 
[self.navigationController pushViewController:vc animated:YES]; 

所以,如果你想刪除的文字,只是使用@""作爲新的後退按鈕的標題。

要設置整個應用程序的後退按鈕,請在appDelegate類中使用以下代碼。並非每個圖標都可以完美匹配,所以如果您必須稍微移動它,則可以使用「backInsets」。在我的例子中,圖標將向下移動2px。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    ... 
    ... 
    [self customBackButtonIcon]; 
    return YES; 
} 

- (void)customBackButtonIcon 
{   
    UIEdgeInsets backInsets = UIEdgeInsetsMake(0, 0, -2, 0); 
    UIImage *backImg = [[[UIImage imageNamed:@"back_button_white"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] imageWithAlignmentRectInsets:backInsets]; 
    [[UINavigationBar appearance] setBackIndicatorImage:backImg]; 
    [[UINavigationBar appearance] setBackIndicatorTransitionMaskImage:backImg]; 
} 

測試與iOS9

+0

或者,你可以把self.navigationItem.backBarButtonItem = ....放到你的setup/viewDidLoad方法上,在你當前的viewController上推新的。 – Rikco 2016-06-23 21:41:12

+1

這是最好的答案,爲什麼沒有upvote? – NeoWang 2017-10-29 04:03:38