2010-08-16 9 views
7

Estoy creando una vista como esta:eliminar la subvista UIView basada en la etiqueta?

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

Esto puede ocurrir varias veces en este controlador de vista así que antes de crear una nueva vista como esta Quiero eliminar cualquier que pudiera existir con esta etiqueta, estoy tratando esto:

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

Esto no funciona por alguna razón, ¿alguien ve mi problema aquí?

Supongo que podría recorrer todas las vistas y verificar la etiqueta, pero preferiría tener una solución más elegante y directa.

Respuesta

25

¿El problema es que posiblemente solo está eliminando una vista de varias? Prueba esto:

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

Si sólo hay un punto de vista que está siendo creado/etiquetado/retirado, también puede considerar simplemente añadiendo una propiedad para realizar un seguimiento de ese punto de vista, y la escritura:

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

agradable, que funciona como una campeón - ¡gracias! – Slee

Cuestiones relacionadas