2010-08-16 15 views
7

Sto creando una vista come questa:rimuovi sottoview UIView in base al tag?

UILabel *qty = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 20)]; 
qty.backgroundColor = [UIColor whiteColor]; 
qty.text =[NSString stringWithFormat:@" Qty: %@", currentQty]; 
qty.alpha = 0.5; 
[qty setTag:999]; 
[self.view addSubview:qty]; 
[qty release]; 

Questo può accadere più volte in questo controller di vista così prima di creare una nuova vista come questo che voglio cancellare qualunque che potrebbero esistere con questo tag, sto cercando this:

UIView *removeView = [self.view viewWithTag:999]; 
[removeView removeFromSuperview]; 

Questo non funziona per qualche motivo, qualcuno vede il mio problema qui?

Immagino di poter scorrere tutte le viste e controllare il tag, ma preferirei avere una soluzione più elegante e diretta.

risposta

25

È il problema che è possibile rimuovere solo una visualizzazione di più? Prova questo:

UIView *removeView; 
while((removeView = [self.view viewWithTag:999]) != nil) { 
    [removeView removeFromSuperview]; 
} 

Se c'è solo un punto di vista che è sempre creato/taggato/rimosso, si potrebbe anche prendere in considerazione solo l'aggiunta di una proprietà per monitorare questo punto di vista, e la scrittura:

[self.subView removeFromSuperview]; 
self.subView = qty; 
+1

bello, funziona come un campione - grazie! – Slee