2010-06-19 5 views
8

Il semble que l'UIView n'a pas des méthodes comme "didRemoveFromSuperview" ou "willRemoveFromSuperview". Ensuite, Comment écouter l'événement quand un UIView retiré de son superView? Je devrais utiliser KVO? Merci d'avance!Comment être informé lorsqu'un UIView est détaché de son superView?

+0

Vous savez quand une vue se retire, parce que vous le faites dans le code de toute façon? Il suffit de brancher votre code là-bas, ou une fonction d'aide. – Eiko

Répondre

4

Vous pouvez sous-classer votre UIView et publier des notifications à partir de la méthode - (void)removeFromSuperview.

+12

Je trouve.Api doc dit: willMoveToSuperview: Informe le destinataire que sa vue d'ensemble est sur le point de changer pour l'aperçu indiqué (qui peut être nul). ----------------------------------------- Lorsque cette méthode est appelée et le paramètre est nul, la vue est supprimée – Jagie

19

Ce sujet est assez vieux, mais je l'ai trouvé un moyen de suffisamment le faire .Depuis la recherche google n'a pas été utile, il est ici (provenant de la documentation de UIView)

l'observation des changements View liés

- didAddSubview:

- willRemoveSubview:

- willMoveToSuperview:

- didMoveToSuperview

- willMoveToWindow:

- didMoveToWindow

13

Cela fonctionne (testé sur iOS8):

-(void) didMoveToWindow { 
    [super didMoveToWindow]; // (does nothing by default) 
    if (self.window == nil) { 
     // YOUR CODE FOR WHEN UIVIEW IS REMOVED 
    } 
} 

According to the UIView docs:

L'implémentation par défaut de cette méthode faire rien n'est. Les sous-classes peuvent le remplacer pour effectuer des actions supplémentaires chaque fois que la fenêtre change.

La propriété fenêtre peut être nul ... Cela se produit lorsque le récepteur vient d'être retiré de son superview ou lorsque le récepteur vient d'être ajouté à un superview qui n'est pas attaché à une fenêtre.

0
- (void) willMoveToSuperview: (UIView *) newSuperview{ 
    if(newSuperview == nil){ 
     // UIView was removed from superview 
    } else { 
     // UIView was added to superview 
    } 
}