有沒有什麼辦法我可以趕上事件當我按下後退按鈕在我的iPhone應用程序?現在我正在使用一個名爲Back的圖像併爲其定義動作。返回導航在iphone應用程序
我的客戶需要默認的後退按鈕指向前一個屏幕,所以基於點擊事件,我應該能夠使它指向特定的屏幕,以便顯示該屏幕的標題。
總之,我需要後退按鈕來顯示我需要的標題,這有可能嗎?
在此先感謝。
有沒有什麼辦法我可以趕上事件當我按下後退按鈕在我的iPhone應用程序?現在我正在使用一個名爲Back的圖像併爲其定義動作。返回導航在iphone應用程序
我的客戶需要默認的後退按鈕指向前一個屏幕,所以基於點擊事件,我應該能夠使它指向特定的屏幕,以便顯示該屏幕的標題。
總之,我需要後退按鈕來顯示我需要的標題,這有可能嗎?
在此先感謝。
有兩種方法可以做到這一點:
自己實現後退按鈕並調用UINavigationController
的- (UIViewController *)popViewControllerAnimated:(BOOL)animated
子類UINavigationController
和實施- (UIViewController *)popViewControllerAnimated:(BOOL)animated
做你的處理和傳遞通話到super
。
正如在另一個答案UINavigationBarDelegate
建議您允許您檢測按鈕是否被按下,如果您處理– navigationBar:didPopItem:
消息。
你可以做viewWillDisappear:
方法你的代碼,並把國旗在viewWillAppear
bBackClicked = true,並且如果從當前視圖控制器將任何其他控制器,把標誌bBackClicked =假。
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;
}
這已超過了目前公認的答案,因爲它不要求組件的子類,蘋果的文檔說優勢你不應該繼承。它還保留了內置後退按鈕的所有行爲,而不必重寫它。
此方法比其他提供的方法更簡單。這種方法的一個優點是你不需要用委託方法不必要地複雜你的代碼。如果您已經擁有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];
}
爲UINavigationController的文檔使用與回圖像的按鈕,並確定該按鈕單擊事件的儀式動作阻礙你的子類,所以我不建議選擇2 – Dolbz
實現後退按鈕自己意味着**? **如果這是我所說的在當前情況下在我的代碼中執行的情況。 –
@Narasimha是的。 –