Essayez ça :
UIView *v = [self.containerView viewWithTag:[n integerValue]];
v.hidden = YES;
[self.containerView bringSubviewToFront:v];
[v removeFromSuperview];
Une autre chose que je viens de remarquer dans le document sur la classe UIView - voir la dernière phrase :
removeFromSuperview Détache le récepteur de sa vue supérieure et de sa fenêtre, et le supprime de la chaîne des répondeurs.
- (void)removeFromSuperview
Discussion Si la vue supérieure du récepteur n'est pas nil, cette méthode libère le récepteur. Si vous prévoyez de réutiliser la vue, veillez à la conserver avant d'appeler cette méthode et veillez à la libérer comme il se doit lorsque vous en avez fini avec elle ou après l'avoir ajoutée à une autre hiérarchie de vues.
N'invoquez jamais cette méthode pendant l'affichage.
MISE À JOUR : Nous sommes maintenant en 2014 et la suppression d'une sous-vue sans la masquer fonctionne parfaitement. Le code de l'affiche originale devrait fonctionner tel quel :
UIView *v = [self.containerView viewWithTag:[n integerValue]];
[v removeFromSuperview];
Cela supprimera v et toutes les vues qu'il a attachées à lui en tant que sous-vues, laissant derrière lui containerView et tous les frères et sœurs de v.