2013-07-30 54 views
12

我在遺留應用程序上工作,發現我的view[Will/Did]Disappear方法並不總是正確觸發。viewWillDisappear在調用popToRootViewControllerAnimated時未調用

這種情況是,我有一個(自定義)UIViewController在AppDelegate中設置爲rootViewController。此rootViewController有一個UINavigationController,其上有兩個視圖控制器。當用戶按下主頁按鈕時,用戶被註銷。當他後來返回到應用程序,該應用程序調用[UINavigationController popToRootViewControllerAnimated:YES],然後顯示一個模式UIViewController用於登錄

的問題是:當我按下/上UINavigationController流行通常情況下,我的viewWillDisappear方法是否正確調用。但是當我使用popToRootViewControllerAnimated:方法時,viewWillDisappear不會在任何彈出的viewController上調用。

搜索互聯網上只給兩個可能的原因:

的這些建議都不是我的應用程序的情況下。我不知道要去哪裏看。有人建議在應用程序中做錯了什麼?

+0

好找:)。謝謝! – GoGreen

回答

16

視圖可能不在屏幕上。它必須在屏幕上(可見)才能調用viewWillDisappear:方法。如果它從背景中回來,則不可見。

您可以嘗試使用willMoveToParentViewController:,這是在視圖控制器從其父項中移除時調用的。

+0

這是一個非常有趣的建議!我現在嘗試在應用程序中的另一個地方使用popToRootViewController,然後我的viewWillDisappear按預期方式調用,所以您到目前爲止是正確的。不過,我也試着製作一個測試應用程序,與我的設置完全相同,其中'popToRootViewControllerAnimated:'是從AppDelegate的'applicationDidBecomeActive:'中調用的。在這裏,'viewWillDisappear:'方法也被調用。這仍然表明,它應該被調用,但在我的應用程序中出現了問題。 – JRV

+1

之所以會發生這種情況,原因是我在調用'applicationDidBecomeActive:'方法時(剛調用'popToRootViewControllerAnimated:'後)呈現模態視圖控制器。所以你的回答是正確的 - 當應用程序啓動時,視圖顯然不在屏幕上。 – JRV

+1

在將這個問題與Apple的技術支持結合起來之後,它變成了iOS中的一個錯誤(它出現在6和7 Beta 5中)。我向蘋果提交了一個錯誤報告。我使用'willMoveToParentViewController'作爲解決方法,給你+1的好建議:-) – JRV

0

這樣對我有用

[nav performSelector:@selector(popToRootViewControllerAnimated:) withObject:nil afterDelay:0.0]; 

我改寫的UITabBarController

- (void)setSelectedIndex:(NSUInteger)selectedIndex { 

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.01 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ 
     UINavigationController *navigationController = [originalViewController as:[UINavigationController class]]; 
     if (navigationController.presentedViewController) { 
      [navigationController dismissViewControllerAnimated:NO completion:^{ 
       [navigationController popToRootViewControllerAnimated:NO]; 
      }]; 
     }else if (navigationController.topViewController){ 
      [navigationController popToRootViewControllerAnimated:NO]; 
     } 
    }); 

}

相關問題