2010-12-14 39 views
6

在iOS4.2的/ iPhone4的如何知道在後臺顯示UIViewController視圖的時間?

  • 點擊圖標啓動程序(會顯示一些視圖 控制器視圖)
  • 點擊iPhone主頁鍵(返回 主屏幕)
  • 雙擊Home鍵
  • 選擇此前推出的應用程序從 選擇現在

我可以看到我的應用程序委託在最後一步之後被選中時會收到一條消息「applicationDidBecomeActive」,但我的viewController(當前顯示的那個人)是如何知道的?

viewDidLoad已被調用,所以不會再次調用。 viewWillLoad不會再被調用。

似乎無法弄清楚。我想問的原因是我想檢查是否進行了任何設置更改,但是希望在視圖控制器中這樣做,因爲這是關心的事情。

回答

5
在你

是的appDelegate applicationDidBecomeActive把這個:

- (void)applicationDidBecomeActive:(UIApplication *)application 
{ 
    UINavigationController *navc = (UINavigationController *)[tabBarController selectedViewController]; 

    UIViewController *topvc = [navc topViewController]; 

    if ([topvc respondsToSelector:@selector(viewControllerDidBecomeActive)]) 
    { 
     [topvc performSelector:@selector(viewControllerDidBecomeActive)]; 
    } 
} 

這得到正被屏幕上看到的viewController。您只需在每個viewControllers上實現viewControllerDidBecomeActive;)

+0

對,那種作品,但不是我正在尋找的。我的視圖層次結構稍微複雜一些,所以你的發佈代碼不會按原樣工作,但我明白了,我可以這樣做。所以它絕對是一種方式。我想我希望我錯過了一些東西,並且有一種更直接的方式,它獨立於任何視圖控制器層次結構。 – Fraggle 2010-12-14 20:58:23

+0

現在幾年後,但AFAICS最好的選擇是使用NSNotificationCenter。 – 2013-10-15 12:18:02

0

在appDelegate applicationDidBecomeActive中設置一個布爾屬性,標記它剛剛從後臺出現。

然後在你的viewcontroller中,特別是在viewDidAppear覆蓋中,檢查appDelegate屬性,如果它是真的,那麼你知道它已經來自背景,否則它就像正常一樣出現。順便說一下,將布爾屬性設置爲false以保持整潔。

EDIT- 除非重新創建導航堆棧,否則必須在applicationDidBecomeActive中手動調用viewDidAppear。如果你能夠獲得一個指向當前可見視圖控制器的指針,那麼調用viewDidAppear應該是一個沒有大礙的方法,因爲所有的視圖控制器都有這個方法。您不需要任何代表或者等

+0

唔,不這樣做。這個觀點已經出現了。然後有人去改變一些設置,然後他們回到應用程序。無論如何,通常在iOS 4上,viewDidAppear不會再被調用,對吧? – Fraggle 2010-12-15 19:55:32

+0

對不起,您的權利!我在應用程序中忘記了我正在對applicationDidBecomeActive中的導航堆棧進行操作。如果你有一個指向你當前可見視圖控制器的指針,那麼你可以在你的視圖中調用一個函數來告訴它檢查是否有任何改變,但這與Thomas的答案基本相同,但沒有代表的優雅。 – Rob 2010-12-16 07:04:38

相關問題