2009-02-26 4 views
31

Quel est le code pour vous abonner à un événement comme applicationWillResignActive dans n'importe quel endroit de votre application iPhone?Comment réagir à applicationWillResignActive de n'importe où?

[UPDATE]

Permettez-moi de reformuler ma question. Je ne veux pas répondre à cela dans mon application de délégué, mais plutôt écouter cet événement d'un autre cours. Est-ce possible ou dois-je passer l'événement du délégué d'application à la classe concernée?

Répondre

71

On dirait que vous recherchez ce code.

- (void) applicationWillResign { 
    NSLog(@"About to lose focus"); 
} 

- (void) myMethod { 
    [[NSNotificationCenter defaultCenter] 
     addObserver:self 
     selector:@selector(applicationWillResign) 
     name:UIApplicationWillResignActiveNotification 
     object:NULL]; 
} 
+10

Il faut également supprimer l'observateur à un moment donné, le plus souvent dans dealloc: \t [[NSNotificationCenter defaultCenter] removeObserver: auto]; – LearnCocos2D

+0

@ LearnCocos2D Pourquoi? – Houssni

+1

NSNotificationCenter peut planter l'envoi d'un message à un observateur désalloué. De la docs: ["Veillez à appeler removeObserver: nom: object: before notificationObserver ou tout objet spécifié dans addObserver: selector: nom: object: est désalloué."] (Https://developer.apple.com/library/mac /documentation/Cocoa/Reference/Foundation/Classes/NSNotificationCenter_Class/index.html#//apple_ref/occ/instm/NSNotificationCenter/addObserver:selector:name:object :) – LearnCocos2D

0

Votre sujet et votre question demandent des choses légèrement différentes.

Votre application recevra automatiquement applicationWillResignActive, avec applicationWillTerminate. Aucun abonnement n'est nécessaire, il suffit d'implémenter la fonction dans votre application.

En ce qui concerne la façon de répondre, cela dépend de l'application. Bien que vous puissiez choisir de ne rien faire, le comportement recommandé consiste à arrêter ou à ralentir toute fonctionnalité non critique. Par exemple. Si vous étiez un jeu, vous arrêteriez de mettre à jour l'affichage et/ou de mettre le jeu en pause.

4

implémentez la méthode ci-dessous dans votre délégué de l'application:

-(void)applicationWillResignActive:(UIApplication *)application 

Cela vous permet de réagir lorsque l'application devient inactive - lorsque tel est le cas, il est en cours d'exécution, mais pas la distribution des événements entrants. Cela se produit, par exemple, lorsqu'une fenêtre de superposition apparaît ou lorsque le périphérique est verrouillé. Juste avant qu'il ne devienne inactif, l'application publie également un UIApplicationWillResignActiveNotification.

11

Jetez un oeil à la documentation de la méthode que vous parlez:

applicationWillResignActive:

Indique le délégué que l'application devient inactif. Cette méthode est facultative.

- (void)applicationWillResignActive:(UIApplication *)application 

[...]

Discussion

[...]

Juste avant qu'il ne devienne inactif, l'application affiche également un UIApplicationWillResignActiveNotification.

Questions connexes