objective-c subview

objective c - ¿Cómo eliminar subvistas en Objective-C?



subview (3)

Siempre me ha sorprendido que la API de Objective-C no tenga un método simple para eliminar todas las subvistas de una vista UIV. (La API de Flash lo hace, y terminas necesitándolo un poco).

De todos modos, este es el pequeño método de ayuda que utilizo para eso:

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

EDITAR: acabo de encontrar una solución más elegante aquí: ¿Cuál es la mejor manera de eliminar todas las subvistas de su autoevaluación?

Estoy usando eso ahora como sigue:

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

Me gusta más ese.

He agregado UIButton y UITextView como subvistas a mi vista programáticamente.

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

Necesito eliminar todas las subvistas cuando se hace clic en el botón.

Yo he tratado:

[self.view removeFromSuperView]

pero no está funcionando


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

En ese caso [self.view removeFromSuperView] elimina self.view de su propia vista de supervisión, pero self es el objeto desde cuya vista desea eliminar subvistas. Si desea eliminar todas las subvistas del objeto, debe hacer esto en su lugar:

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

Quizás desee almacenar esas subvistas en una NSArray y hacer un ciclo sobre esa matriz invocando removeFromSuperview en cada elemento de esa matriz.


para eliminar todas las subvistas que agregó a la vista

usa el siguiente código

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