J'ai ajouté UIButton et UITextView comme sous-vues à ma vue par programme.
notesDescriptionView = [[UIView alloc]initWithFrame:CGRectMake(0,0,320,460)];
notesDescriptionView.backgroundColor = [UIColor redColor];
[self.view addSubview:notesDescriptionView];
textView = [[UITextView alloc] initWithFrame:CGRectMake(0,0,320,420)];
[self.view addSubview:textView];
printf("\n description button \n");
button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button
addTarget:self action:@selector(cancel:)
forControlEvents:UIControlEventTouchDown];
[button setTitle:@"OK" forState:UIControlStateNormal];
button.frame = CGRectMake(80.0, 420.0, 160.0, 40.0);
[self.view addSubview:button];
Je dois supprimer toutes les sous-vues lorsque le bouton est cliqué.
J'ai essayé:
[self.view removeFromSuperView]
mais ça ne marche pas.
Je suppose que vous appelez [self.view removeFromSuperView]
à partir d'une méthode de la même classe que l'extrait ci-dessus.
Dans ce cas [self.view removeFromSuperView]
supprime self.view de sa propre vue d'ensemble, mais self est l'objet dont vous souhaitez supprimer les sous-vues. Si vous souhaitez supprimer toutes les sous-vues de l'objet, vous devez le faire à la place:
[notesDescriptionView removeFromSuperview];
[button.view removeFromSuperview];
[textView removeFromSuperview];
Vous voudrez peut-être stocker ces sous-vues dans un NSArray
et faire une boucle sur ce tableau en invoquant removeFromSuperview
sur chaque élément de ce tableau.
pour supprimer toutes les sous-vues que vous avez ajoutées à la vue
utilisez le code suivant
for (UIView *view in [self.view subviews])
{
[view removeFromSuperview];
}
J'ai toujours été surpris que l'API Objective-C n'ait pas de méthode simple pour supprimer toutes les sous-vues d'une UIView. (L'API Flash le fait, et vous finissez par en avoir besoin un peu.)
Quoi qu'il en soit, voici la petite méthode d'aide que j'utilise pour cela:
- (void)removeAllSubviewsFromUIView:(UIView *)parentView
{
for (id child in [parentView subviews])
{
if ([child isMemberOfClass:[UIView class]])
{
[child removeFromSuperview];
}
}
}
EDIT: viens de trouver une solution plus élégante ici: Quelle est la meilleure façon de supprimer toutes les sous-vues de vous self.view?
J'utilise maintenant comme suit:
// Make sure the background and foreground views are empty:
[self.backgroundContentView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
[self.foregroundContentView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
J'aime mieux ça.