2011-01-04 18 views
1

Gibt es eine Möglichkeit, die Ansicht aller Schaltflächen zu löschen? Mein Code erzeugt jede Sekunde Schaltflächen und ich habe eine Schaltfläche erstellt, mit der ich sie alle vom Bildschirm löschen möchte. Als ich [brick.removeFromSuperview] versuchte (Ziegelstein ist der Name des Knopfes), löschte es nur den letzten Knopf, der produziert wurde.Schaltflächen aus einer Ansicht entfernen

+0

Ich bin neugierig ... warum erstellt Ihre App jede Sekunde Schaltflächen? Ist das eine Art Spiel? – donkim

Antwort

3

Sie können die Referenzen zu all Ihren Tasten in einer NSMutableArray verfolgen.

e.x.

NSMutableArray *buttons = [[NSMutableArray alloc] init]; 

// Button creation 
UIButton *button = [[UIButton alloc] init...]; 
[yourView addSubview:button]; 
[buttons addObject:button]; 
[button release]; 

// Button removal 
[buttons makeObjectsPerformSelector:@selector(removeFromSuperview)]; 
[buttons removeAllObjects]; // Alternatively, you could omit this line 
          // and recycle the buttons at a later time 

Ein Vorteil dieser Methode (wie die Auffassung der Subviews nur gegen Aufzählen und suchen Tasten) ist, dass Sie kümmern müssen nicht über UIButtons aus Ihrer Sicht zu entfernen, die nicht sein sollte. Wenn Sie beispielsweise nicht möchten, dass die Schaltfläche "Alle Schaltflächen löschen" entfernt wird, fügen Sie sie einfach nicht zum Array hinzu.

3
for (UIView *view in [self subviews]) { 
    if ([view isKindOfClass:[UIButton class]]) { 
     [view removeFromSuperview]; 
    } 
} 

Vorsicht, dies wird buchstäblich alle Schaltflächen aus der angegebenen Ansicht löschen. Sie möchten wahrscheinlich eine Art Bedingung, um nur die generierten Schaltflächen zu löschen. Sie können von generierten Tasten unterscheiden, indem Sie eine tag auf Ihren anderen Tasten setzen, wenn die Taste keine Markierung hat, dann entfernen Sie sie.

+0

Warum die down vote? –

1
NSMutableArray * buttons = [[NSMutableArray alloc] init]; 

for(NSObject * btn in btn.superview.subviews) 
{ 
    if([btn isKindOfClass: [UIButton class]]) 
    [buttons addObject: btn]; 
} 

for(UIView * btn in buttons) 
    [btn removeFromSuperview]; 

[buttons release]; 

das temporäre Array erforderlich ist, weil die Schaltfläche Entfernen der Enumerator Herstellung unvorhersehbare Ergebnisse invalidiert.

Verwandte Themen