2010-06-09 7 views
17

Ich habe UIButton, UITextView als Unteransicht meiner Ansicht, programmatisch hinzugefügt.wie Unteransichten zu entfernen

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]; 

hier, wenn wir auf die Schaltfläche klicken, ich brauche die alle Unteransichten zu entfernen,

Ich versuche

[self.view removeFromSuperView] 

aber seine Arbeit nicht

jede Hilfe.

Antwort

16

Ich nehme an, Sie rufen [self.view removeFromSuperView] von einer Methode in der gleichen Klasse wie das obige Snippet.

In diesem Fall entfernt [self.view removeFromSuperView] self.view aus seiner eigenen Superview, aber selbst ist das Objekt, aus dessen Sicht Sie Subviews entfernen möchten. Wenn Sie alle Subviews des Objekts entfernen möchten, müssen Sie dies stattdessen tun:

[notesDescriptionView removeFromSuperview]; 
[button.view removeFromSuperview]; 
[textView removeFromSuperview]; 

Vielleicht möchten Sie diese Subviews in einem NSArray und Schleife über das Array speichern removeFromSuperview, dass auf jedem Element Aufruf Array.

+0

was ist mit der Schaltfläche, die ich erstellt habe, indem Sie als Unteransicht hinzufügen. eigentlich versuche ich eine ansicht mit textview zu zeigen, wenn die taste gedrückt wird, nachdem ich auf die andere taste geklickt habe, die in der aktuellen ansicht ist, muss sie meine vorherige ansicht zurückgehen. – mac

+0

ich habe versucht [notesDescriptionView removeFromSuperview]; [textView removeFromSuperview]; aber es funktioniert nicht. – mac

+0

Was ist der richtige Weg, um eine solche Methode aufzurufen, die Subview aus einer Superview aus einer anderen Klasse entfernt? Ich versuche Delegate-Methode, aber es funktioniert nicht. – SanitLee

56

alle Subviews entfernen Sie die Ansicht

den folgenden Code

for (UIView *view in [self.view subviews]) 
    { 
    [view removeFromSuperview]; 
    } 
+1

dies sollte akzeptiert werden antwort! – Umitk

7

ich immer, dass der API nicht über Objective C überrascht habe verwenden hinzugefügt alle ein einfaches Verfahren zum Entfernen von Unteransichten von einer UIView. (Die Flash-API der Fall ist, und Sie am Ende es ziemlich viel zu benötigen.)

Anwyay, das ist der kleine Helfer-Methode, die ich für diese Verwendung:

- (void)removeAllSubviewsFromUIView:(UIView *)parentView 
{ 
    for (id child in [parentView subviews]) 
    { 
    if ([child isMemberOfClass:[UIView class]]) 
    { 
     [child removeFromSuperview]; 
    } 
    } 
} 

EDIT: habe gerade ein elegantere Lösung hier: What is the best way to remove all subviews from you self.view?

Am mit, dass nun wie folgt:

// Make sure the background and foreground views are empty: 
    [self.backgroundContentView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; 
    [self.foregroundContentView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; 

Ich mag t hat besser ...

Erik