4

我的深化發展應用程式iOS 4.2以上版本。 我將我的UINavigationController分類爲插入兩個UIImageView,並使導航欄看起來自定義。 一切是偉大的工作,但我有一個小問題。 我創建的自定義UIBarButtonItem和我的視圖控制器裏面我把他們帶:創建自定義後退鍵的UINavigationController

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithCustomView:backButton]; 

它也能工作,但問題是,使這項工作,我需要從調用它:

- (void)viewDidAppear:(BOOL)animated ; 

所以只有動畫之後出現,我可以看到非定製按鈕1秒之前定製的更換。

(我試圖與viewWillAppear但隨後沒有在導航欄附加)

我想知道您是否有可能解決此問題的解決方案。 PS:我從不使用IB,一切都是以編程的方式進行的。

來自法國的感謝!

編輯1:這裏是沒有爲viewWillAppear顯示任何代碼:

- (void)viewWillAppear:(BOOL)animated { 
    [self setTitle:@"Jeu"]; 

    //Bouton testflight 
    TIFButton *testFeedbackButton = [[TIFButton alloc]init]; 
    [testFeedbackButton setTitle: @"Envoyer un Feedback" forState:UIControlStateNormal]; 
    [testFeedbackButton addTarget:self action:@selector(launchFeedback) forControlEvents:UIControlEventTouchUpInside]; 

    UIBarButtonItem *testFeedback = [[UIBarButtonItem alloc] initWithCustomView:testFeedbackButton]; 

    self.navigationItem.rightBarButtonItem = testFeedback; 

    TIFBackButton *backButton = [[TIFBackButton alloc]init]; 
    [backButton setTitle: @"Retour" forState:UIControlStateNormal]; 
    [backButton addTarget:self action:@selector(popToPrecedentViewController) forControlEvents:UIControlEventTouchUpInside]; 

    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithCustomView:backButton]; 
} 
+0

這應該* *用'viewWillAppear',但你的'backButton'視圖需要被實例化/創建您指定'self.navigationItem.leftBarButtonItem'之前的工作。 – 2012-02-15 20:09:01

+0

爲什麼你需要從viewDidAppear調用它?爲什麼不從viewDidLoad工作? – Canopus 2012-02-15 20:16:29

回答

18

比方說,你有兩個ViewControllers,A和B,你推乙到堆棧時,A爲最頂層,並且要自定義後退按鈕,顯示了當B是在上面。

通常情況下,要做到這一點的方法是設置視圖控制器一個navigationItem.backBarButtonItem

相反,你在做什麼是通過設置其navigationItem.leftBarButtonItem給視圖控制器在導航欄左側的自定義按鍵。

您已經實施了接近正常,但即使您沒有設置視圖控制器一個navigationItem.backBarButtonItem,默認情況下你仍然可以獲得一個默認的後退按鈕以及。因此,該按鈕可能顯示在您的自定義後退按鈕的上方。

如果你設置ViewController B的navigationItem.hidesBackButton = YES那麼你應該沒有任何問題。

而在未來,當您實現自定義後退按鈕時,您應該通過設置navigationItem.backBarButtonItem而不是navigationItem.leftBarButtonItem來完成。您必須做的一個調整是,通過這種方法,例如,您可以使用ViewController AnavigationItem更改當ViewController處於最前面時顯示的後退按鈕。

+0

謝謝,我解決了這個問題。 你說的一切都是正確的,這真的很有幫助,但我發現阻止UIBarButton顯示的錯誤。 實際上,我在子類中添加的UIImageView被「隱藏」按鈕時,他們與viewWillAppear中調用。 所以兩個問題,每一個都解決了。 再次,謝謝! – Trivane 2012-02-15 21:24:03

+0

此方法的問題是您無法將後退按鈕設置爲自定義視圖。你能做的最好的是改變背景圖像。如果你想更好地控制按鈕的外觀,看起來你必須像OP那樣在ViewController B上設置leftBarButtonItem。 – d512 2014-03-30 06:07:19

+0

什麼工作對我來說是'B.navigationItem.hidesBackButton = YES'和'B.navigationItem.leftBarButtonItem = <我的自定義按鈕>'。 – aroth 2014-04-29 06:02:51

1

我想出了一個有點通用的解決方案:https://stackoverflow.com/a/16831482/171933 它涉及UIViewController上的一個類別,並且需要最少的代碼在所有屏幕上都有一個圖像返回按鈕。

3
UIBarButtonItem *backButton = [UIBarButtonItem new]; 

[backButton setTitle:@"Back"]; 

[[self navigationItem] setBackBarButtonItem:backButton]; 

這個代碼你必須在前面的視圖控制器中提到,然後只有它默認的後退按鈕來到下一個視圖控制器。

享受!

相關問題