2010-06-09 9 views
17

He agregado UIButton, UITextView como subvista a mi vista, programáticamente.cómo eliminar vistas secundarias

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

aquí si hacemos clic en el botón, necesito eliminar todos los puntos de vista sub,

estoy tratando

[self.view removeFromSuperView] 

pero no su trabajo

ninguna ayuda.

Respuesta

16

Supongo que está llamando al [self.view removeFromSuperView] desde un método en la misma clase que el fragmento de arriba.

En ese caso, [self.view removeFromSuperView] elimina self.view de su propia supervista, pero self es el objeto desde cuya vista desea eliminar las subvistas. Si desea eliminar todos los subvistas del objeto, lo que necesita hacer esto en su lugar:

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

Tal vez te gustaría para almacenar esos subvistas en un NSArray y lazo sobre esa matriz invocando removeFromSuperview en cada elemento en ese formación.

+0

¿qué ocurre con el botón, he creado, al agregar como sub-vista. en realidad estoy tratando de mostrar una vista con vista de texto, cuando se presiona el botón, después cuando hago clic en el otro botón que está en la vista actual, tiene que volver a mi vista anterior. – mac

+0

intenté [notesDescriptionView removeFromSuperview]; [textView removeFromSuperview]; pero no está funcionando. – mac

+0

¿Cuál es la forma correcta de llamar a un método de este tipo que elimina la subvista de la supervista de otra clase? Estoy intentando delegar método pero no funciona. – SanitLee

56

para eliminar todos los subvistas que haya añadido a la vista

utilizar el siguiente código

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

esto debería ser aceptado ¡respuesta! – Umitk

7

Siempre me ha sorprendido que la API Objetivo C no tiene un método simple para la eliminación de todas vistas secundarias desde una UIView. (La API de Flash hace, y usted termina encima de necesitar que un poco.)

Anwyay, este es el pequeño método de ayuda que utilizo para ello:

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

EDIT: acaba de encontrar una solución más elegante aquí: What is the best way to remove all subviews from you self.view?

estoy usando que ahora de la siguiente manera:

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

me gusta T sombrero mejor ...

Erik

Cuestiones relacionadas