3

有沒有什麼辦法我可以趕上事件當我按下後退按鈕在我的iPhone應用程序?現在我正在使用一個名爲Back的圖像併爲其定義動作。返回導航在iphone應用程序

我的客戶需要默認的後退按鈕指向前一個屏幕,所以基於點擊事件,我應該能夠使它指向特定的屏幕,以便顯示該屏幕的標題。

總之,我需要後退按鈕來顯示我需要的標題,這有可能嗎?

在此先感謝。

回答

3

有兩種方法可以做到這一點:

  1. 自己實現後退按鈕並調用UINavigationController- (UIViewController *)popViewControllerAnimated:(BOOL)animated

  2. 子類UINavigationController和實施- (UIViewController *)popViewControllerAnimated:(BOOL)animated做你的處理和傳遞通話到super

  3. 正如在另一個答案UINavigationBarDelegate建議您允許您檢測按鈕是否被按下,如果您處理– navigationBar:didPopItem:消息。

+1

爲UINavigationController的文檔使用與回圖像的按鈕,並確定該按鈕單擊事件的儀式動作阻礙你的子類,所以我不建議選擇2 – Dolbz

+0

實現後退按鈕自己意味着**? **如果這是我所說的在當前情況下在我的代碼中執行的情況。 –

+0

@Narasimha是的。 –

2

你可以做viewWillDisappear:方法你的代碼,並把國旗在viewWillAppear bBackClicked = true,並且如果從當前視圖控制器將任何其他控制器,把標誌bBackClicked =假。

6

UINavigationBarDelegate如果您處理– navigationBar:didPopItem:消息,可能是最接近檢測按鈕是否被按下的按鈕。

當按下後退按鈕或當代碼彈出導航控制器堆棧本身的視圖時,將調用此選項。如果您的代碼是手動彈出視圖,那麼設置一個標誌來指示您的代碼何時啓動彈出窗口,因此您可以確定何時點擊後退按鈕

在您的UINavigationBarDelegate實現中,創建一個布爾屬性,例如poppedInCode你只是你的代碼之前設置爲true,執行彈出和實施,如委託:

- (void) navigationBar:(UINavigationBar *)navigationBar didPopItem:(UINavigationItem *)item 
{ 
    if (!self.poppedInCode) { 
     // back button was tapped 
    } 

    // set to false ready for the next pop 
    self.poppedInCode = FALSE; 
} 

這已超過了目前公認的答案,因爲它不要求組件的子類,蘋果的文檔說優勢你不應該繼承。它還保留了內置後退按鈕的所有行爲,而不必重寫它。

1

此方法比其他提供的方法更簡單。這種方法的一個優點是你不需要用委託方法不必要地複雜你的代碼。如果您已經擁有UINavigationController的代理,則此方法也更容易實現,因爲它一次只能有一個委託參考。

-(void)viewWillDisappear:(BOOL)animated { 
    if ([self.navigationController.viewControllers indexOfObject:self] == NSNotFound) { 
     // 'Back' button was pressed. We know this is true because self is no longer 
     // in the navigation stack. 
    } 

    [super viewWillDisappear:animated]; 
} 
相關問題