當視圖加載時,我想看看是否因爲用戶按下了後退按鈕。我該如何檢查?找出用戶是否按下了uinavigationcontroller中的後退按鈕?
回答
做到這一點的唯一方法是確保它是後退按鈕,這是爲了創建一個自定義按鈕。如果你不知道該怎麼做,請查看tutorial。它看起來不像普通的後退按鈕,但很接近。如果您需要更多幫助,請發表評論
檢查和其他答案,如果海報讀取這個或許接受,作爲正確的答案 – 2013-05-14 11:43:10
@ user461864,你的意思是其他安德魯,而不是安德魯的其他答案 - 他們是不同的安德魯斯。但你是對的,另一個答案是遠遠優於;目前的比較是一項額外的工作。 – JohnK 2013-06-02 01:20:37
該死的你是對的,..我認爲他回答了兩次很奇怪,但這解釋了 – 2013-06-19 20:40:08
UINavigationController具有發出委託回調的delegate
屬性。請參閱the iOS reference here。
委託沒有「後退按鈕」回調,但它會告訴您什麼時候會出現導航堆棧上的內容。當您按下後,您將頂視圖控制器「彈出」堆棧,因此它會告訴您視圖即將出現。我認爲這是你要找的回調。
你可以有一些簡單的邏輯來檢查它是否是「感興趣」的視圖控制器,然後你可以發送一個通知,等等。
沒有委託顯示何時uinavigationcontroller已經彈出堆棧 – Andrew 2011-05-23 01:43:05
我說UINavigationController有一個委託。如果UINavigationController管理你的視圖層次結構,它確實會回調委託,如果設置。 – makdad 2011-05-23 22:34:55
我正在嘗試這樣做。備份時,不幸的是,它調用了「新的」視圖控制器[備份] - viewWillAppear之前委託方法-navigationController:willShowViewContoller:animated:被調用相同的viewController ... – chadbag 2013-04-21 00:03:48
我發現檢測UINavigationController的後退按鈕按鈕(iOS 5.0之前)的最佳解決方案是驗證當前視圖控制器不存在於導航控制器中查看控制器堆棧。
從邏輯上檢查- (void)viewDidDisappear:(BOOL)animated
中的這個條件可能更安全一些,在調用方法的時候,視圖控制器很有可能從堆棧中移除。
前的iOS 5.0:
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
if (![[self.navigationController viewControllers] containsObject:self]) {
// We were removed from the navigation controller's view controller stack
// thus, we can infer that the back button was pressed
}
}
iOS 5.0及您可以使用-didMoveToParentViewController:
- (void)didMoveToParentViewController:(UIViewController *)parent
{
// parent is nil if this view controller was removed
}
在viewWillDisappear方法檢查
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
if ([self isMovingFromParentViewController]) {
//specific stuff for being popped off stack
}
}
這僅是對後的iOS 5
這是一個稍微不同的場景,但我認爲解決方案可能會幫助其他人。
在我的情況下,我在UIPopoverController中有一個UINavigationController。我需要檢測用戶是否單擊了後退按鈕,或者在彈出框之外單擊。爲此,我檢查了viewWillDisappear中的visibleViewController屬性。如果在關閉時視圖控制器仍然是visibleViewController,那麼彈出窗口將以另一種方式關閉。如果視圖控制器在關閉時不是visibleViewController,則按下後退按鈕。
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
if (self.navigationController.visibleViewController != self) {
<Do something since we're closing using something else>
} else {
<Do something since we're closing because of the back button>
}
}
我試過使用zach的解決方案,但isMovingFromParentViewController在兩種情況下均返回true。
我通過了iOS 5+驗證這個工作
我希望這有助於。
創建自定義的回欄按鈕和設置目標,
第1步:這些方法添加到您的類
- (void)backButtonClicked :(id)sender{
[self.navigationController popViewControllerAnimated:YES];
}
- (void)addBackBarButton{
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(0, 0, 55, 35);
[button setTitle:@"back" forState:UIControlStateNormal];
[button addTarget:self action:@selector(backButtonClicked:) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *customBarItem = [[UIBarButtonItem alloc] initWithCustomView:button];
self.navigationItem.leftBarButtonItem = customBarItem;
}
第2步:致電[自addBackBarButton] in viewDDL加載方法
您將在backButtonClicked方法中獲得操作。你可以用你想要的方式玩它。
乾杯!
爲了完整起見,在斯威夫特混合兩種最upwoted答案(1,2)的:
override func willMoveToParentViewController(parent: UIViewController?) {
super.willMoveToParentViewController(parent)
if parent == nil {
// view controller is popping
}
}
不要使用'will',使用'did',因爲屏幕邊緣的彈出手勢。 – SoftDesigner 2017-10-14 21:37:48
- 1. UINavigationController:確定是否按下了後退按鈕或popViewControllerAnimated
- 2. UINavigationController後退按鈕按下和viewWillDisappear
- 3. 後退按鈕uinavigationcontroller
- 4. UINavigationController的後退按鈕消失了嗎?
- 5. 的UINavigationController上後退按鈕
- 6. UINavigationController沒有後退按鈕
- 7. UINavigationController後退按鈕問題
- 8. UINavigationController後退按鈕問題
- 9. UINavigationController的後退按鈕不是動畫
- 10. AngularJS當用戶按下後退按鈕
- 11. 應用按後退按鈕當按下後退按鈕
- 12. UINavigationController中的自定義後退按鈕
- 13. 覆蓋UINavigationController中的後退按鈕
- 14. UINavigationcontroller中的後退按鈕,代碼爲
- 15. 檢測用戶是否使用了後退按鈕
- 16. iOS檢查後退按鈕是否顯示在UINavigationController中
- 17. Twitter iOS應用v5.3 UINavigationController後退按鈕
- 18. 按下退出按鈕後停止GPS
- 19. 後退按鈕按下
- 20. 後退按鈕被按下
- 21. 添加帶後退按鈕的UINavigationController
- 22. 的UINavigationController和後退按鈕動作
- 23. 如何隱藏UINavigationController的後退按鈕?
- 24. 更改UINavigationController後退按鈕的顏色
- 25. 的UINavigationController和後退按鈕標題
- 26. UINavigationController的後退按鈕位置
- 27. 在輸入時按下UINavigationController後退按鈕
- 28. 如何找出在UINavigationBar中是否點擊後退按鈕?
- 29. 如何識別我是否在IE中按下後退按鈕?
- 30. 是否有可能知道用戶是否按下了後退按鈕以進入頁面?
你想知道它是否是一個用戶發起彈出或一般大跌眼鏡? – 2011-05-23 01:20:22
闡述你的總體目標可能是件好事。可能有更簡單的方法來做你想做的事情。例如,如果您需要知道某個值是否已更改或設置在第二個視圖中,則應該只檢查該值。 – 2011-05-23 01:53:37
彈出是我想告訴的。 – Andrew 2011-05-23 02:01:12