4

電話の受信、画面のロック、アプリケーションの切り替えなど、アプリケーションが中断された場合、中断時に画面に表示されていたビュー/ビューコントローラーに応じて、異なる応答をする必要があります。

私の最初のView Controllerでは、これをVCAと呼びます。私はこれを持っています

              [[NSNotificationCenter defaultCenter]
 addObserver:self
 selector:@selector(doSomething)
 name:UIApplicationWillResignActiveNotification 
 object:NULL];

    -(void)doSomething{
    //code here
    };

VCBで私は持っています

    [[NSNotificationCenter defaultCenter]
 addObserver:self
 selector:@selector(doSomethingElse)
 name:UIApplicationWillResignActiveNotification 
 object:NULL];

    -(void)doSomethingElse{ //code here };

ただし、VCB が画面上にある場合、または後続のビュー コントローラー (vcc、vcd、vce) があり、画面がロックされている場合、VCA で定義されている doSomething メソッドにのみ応答します。VCA の後にあるビュー コントローラーの 1 つに UIApplicationWillResignActiveNotification がなくても、VCA で定義されている doSomethign メソッドに応答します。

バックグラウンドになったときに画面に表示されているビューに応じて、アプリケーションの応答を変える方法はありますか?

4

3 に答える 3

2

これは、applicationDidEnterBackgroundで機能します

if ([navigationViewController.visibleViewController isKindOfClass:[YourClass class]]) {
    //your code
}
于 2012-06-13T03:14:45.043 に答える
0

doSomethingElse 関数が呼び出されないと言っていますか? doSomething に加えて呼び出されている可能性がありますか? そう思います。

その場合、doSomething と doSomethingElse で、現在ロードされていない場合に通知を無視するために、最初の行としてチェックを追加できます。

if ([self isLoaded] == NO)
   return;
于 2012-06-13T03:06:30.373 に答える
0

通知を受けた時点で現在の visibleViewController を確認してみてはいかがでしょうか。受信者と一致する場合はアクションを実行し、そうでない場合は無視します。

于 2012-06-13T03:55:38.463 に答える