2014-11-04 50 views
0

我在我的應用程序中使用標準的導航控制器,但我最近不得不作出的更改,只有當用戶按下導航上的後退按鈕酒吧。所以爲了解決這個問題,我試圖創建一個自定義後退按鈕來捕捉它的選擇器。添加自定義後退按鈕現在導致當去RootViewController崩潰

現在很明顯,導航欄已經有一個後退按鈕,所以即時通訊基本上只是試圖覆蓋/取代它。我沒有做任何特別的事情,只是分配它並將其設置爲導航項目。然而

UIBarButtonItem *backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self action:@selector(backButtonClicked)]; 
[self.navigationItem setLeftBarButtonItem: backBarButtonItem]; 

的問題是壓制回了幾次後(此屏幕在導航幾道深深的),當我背到RootViewController的,我得到一個異常。我猜測它是因爲我添加了一個後退按鈕,當已經存在一個後退按鈕,不知何故導航正在擺脫怪物,但我不知道該怎麼改變。

+0

這個例外說什麼? – nburk 2014-11-04 16:31:21

+0

你得到了什麼樣的例外?如果你設置了所有異常斷點並啓用了殭屍,那麼我們需要看看引發了什麼,然後告訴我們錯誤是什麼,以及它是否是一個正在獲取消息的釋放對象。推一個後退按鈕來代替系統,沒有其他人沒有做過,所以我懷疑它會是這樣。期待看到會發生什麼。 – 2014-11-04 16:34:09

+0

它只是一個EXEC_BAD_ACCESS – JMD 2014-11-04 16:34:45

回答

0

更換UINavigationController的後退按鈕不是一般的我猜,造成意外的行爲,一個非常好的主意...

如果您需要的視圖中再次熄滅屏幕之前執行一些動作,你可以在viewWillDisappear中實施您所需的功能。

如果你絕對要更換後退按鈕,你應該採取不同的方法:

類別UIViewController,是這樣的:

的UIViewController + BackButton.h

@interface UIViewController (BackButton) 
    - (void)setBackButton; 
    - (void)didPressBackButton; 
@end 

UIViewController + BackButton.m

@implementation UIViewController (CustomBackButton) 

    - (void)setBackButton 
    { 
     UIBarButtonItem *backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self action:@selector(goBack)]; 
     [self.navigationItem setLeftBarButtonItem:backBarButtonItem]; 
    } 

    - (void)goBack 
    { 
     [self.navigationController popViewControllerAnimated:YES]; 
     if ([self respondsToSelector:@selector(didPressBackButton)]) 
     { 
      [self didPressBackButton]; 
     } 
    } 

@end 

這樣一來,您可以輕鬆地設置您的自定義後退按鈕在您的視圖控制器viewDidLoad和實施方法didPressBackButton進行自定義操作。

#import UIViewController+BackButton.h 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [self setBackButton]; 
} 

- (void)didPressBackButton 
{ 
    // your code here 
} 
+0

我無法將我的更改添加到viewDidDisappear中,因爲該視圖位於標籤欄中,並且在切換標籤頁時會觸發這些更改,從而導致我的更改在我不希望它們觸發時觸發。我只希望他們在用戶向後導航時觸發。 我也注意到這個問題並沒有真正與我的後退按鈕相關,而是手動調用popViewController。我在屏幕上也有一個取消按鈕,這個問題也出現了。 – JMD 2014-11-04 16:42:37