2011-10-19 11 views
2

J'ai une classe UIView que je supprime actuellement de ma vue en utilisant de l'intérieur de la classe [self removeFromSuperview]. J'espère que c'est la bonne chose à faire.Vérifiez si la vue a été supprimée ou non?

Cependant, maintenant à partir de mon contrôleur de vue (auquel j'ajoute cette vue), j'ai besoin de savoir quand il s'est retiré pour que je puisse appeler une méthode lorsque cela se produit.

Toute aide serait appréciée, merci.

Répondre

1

D'une manière générale, la vue ne devrait pas faire des choses comme enlever lui-même. Voilà le travail du contrôleur de vue.

Si une UIView la sous-classe peut produire des événements nécessitant la modification de la hiérarchie de vue, je définirais une propriété delegate pour cette vue et, lorsqu'un événement se produirait, j'appellerais une méthode sur ce délégué, puis, lorsque le contrôleur de vue ajouterait la vue, lui-même en tant que délégué et de définir la méthode pertinente pour gérer l'événement

0

Vous pouvez avoir un rappel de délégué qui définit le contrôleur en tant que délégué de la vue. Lorsque vous êtes sur le point de supprimer l'affichage, effectuez le rappel de délégué et implémentez la méthode de rappel dans votre contrôleur.

Le « removeFromSuperview » a toujours semblé en arrière pour moi ... :(

0

Je suppose que vous faites l'appel de suppression après une sorte d'action, comme une pression sur un bouton ou quelque chose. si tel est le cas, réglez le délégué des boutons pour le contrôleur de vue, pas la classe de vue, et à l'intérieur de la méthode d'action dans le contrôleur de vue, appelez

[yourCustomView removeFromSuperview]; 
0

Le meilleur choix serait de laisser le contrôleur retirer la Voir

[self.view removeFromSuperview]; 

et de savoir si la vue a été retiré (ou jamais ajouté) vous pouvez demander

if(![self.view superview]) { 
    //no superview means not in the view hierarchy 
} 
0

Je ne sais pas ce que sdk vous utilisez - mais je suis en utilisant iOS 5 et je viens d'utiliser la après m ODE dans le superview:

-(void)willRemoveSubview:(UIView *)subview{ 
    if([subview isEqual:someView]){ 
     //do stuff 
    } 
    //you could do some stuff here too 
} 
+0

Je tiens également à noter que je ne suis pas en utilisant un fichier constructeur d'interface - et je utilise la méthode de délégué loadview pour charger une sous-classe personnalisée de UIView –

Questions connexes