2010-12-14 5 views
6

( ホーム画面に戻る) UIViewControllerビューがバックグラウンドで表示されたときを知るには?

  • ダブルクリックホームボタン
  • iPhoneのホームボタンをクリックしてくださいクリックしてアイコンのアプリを起動するには(いくつかのビュー コントローラビューが表示されている)
    • iOS4.2/iPhone4の

    • 選択 から前に立ち上げたアプリ選択

    今、私は私のアプリを見ることができますデリゲートは最後のステップの後で選択されたときに "applicationDidBecomeActive"というメッセージを受け取りますが、viewController(現在ビューが表示されている人)はどのように知っていますか?

    viewDidLoadがすでに呼び出されているため、再度呼び出されることはありません。 viewWillLoadは再び呼び出されません。

    理解できないようです。理由は私は設定の変更が行われたかどうかを確認したいと思っているのですが、View Controllerでそのようにしたいのですが、それは気にすることです。これは、画面上で見られているのViewControllerを取得

    - (void)applicationDidBecomeActive:(UIApplication *)application 
    { 
        UINavigationController *navc = (UINavigationController *)[tabBarController selectedViewController]; 
    
        UIViewController *topvc = [navc topViewController]; 
    
        if ([topvc respondsToSelector:@selector(viewControllerDidBecomeActive)]) 
        { 
         [topvc performSelector:@selector(viewControllerDidBecomeActive)]; 
        } 
    } 
    

    :あなたの中に

  • 答えて

    5

    はこれを入れappDelegate applicationDidBecomeActiveです。 )

    +0

    そういう作品ですが、私が探していたものではありません。私のビューの階層はもう少し複雑なので、あなたの投稿されたコードはそのままでは動作しませんが、私はそのアイデアを得て、私はそうすることができます。だから間違いなく一つの方法です。私は何かを見逃していたと思っていて、ビューコントローラの階層に関係なく、より単純な方法がありました。 – Fraggle

    +0

    数年後、現在AFAICSはNSNotificationCenterを使用することをお勧めします。 –

    0

    appDelegate applicationDidBecomeActiveでは、背景から現れたばかりのブール値プロパティを設定します。これは、すべてのviewControllersにviewControllerDidBecomeActiveを実装するだけです。

    次にviewcontrollerで、特にviewDidAppearオーバーライドでappDelegateプロパティを確認します。本当なら、それがバックグラウンドから来ていることを知っていれば、そうでなければ正常であるように見えます。 BTWその後、真理値のためにbooleanプロパティをfalseに設定します。

    EDIT- ナビゲーションスタックを再作成しない限り、applicationDidBecomeActiveでviewDidAppearを手動で呼び出す必要があります。現在の可視表示コントローラーへのポインターを取得できた場合は、すべてのビューコントローラーにこのメソッドがあるので、viewDidAppearを呼び出すのは面倒ではありません。あなたは、任意の代表者を必要としないだろうか、など

    +0

    いいえ、それはしません。ビューはすでに登場しています。その後、誰かが行っていくつかの設定を変更し、その後、彼らはアプリに戻ります。とにかく、iOS 4では通常、viewDidAppearは再び呼び出されません。 – Fraggle

    +0

    ああ、ごめんなさい!私は自分のアプリケーションで忘れてしまった。私はapplicationDidBecomeActiveのナビゲーションスタックに物事をしている。現在表示されているビューコントローラへのポインタがあれば、変更があったかどうかをチェックするように指示するビュー内の関数を呼び出すことができますが、これは基本的にThomasの答えと同じですが、 – Rob

    11

    答えはここにある:Handling applicationDidBecomeActive - "How can a view controller respond to the app becoming Active?"

    使用NSNotificationCenterはあなたのビューコントローラでUIApplicationDidBecomeActiveNotificationイベントの通知を取得します。

    +0

    @fraggleこれは最も信頼性の高いソリューションのようです。あなたの質問に対する答えとしてマークすることを検討してください。 – ettore

    関連する問題