iphone - todos - ¿Cómo eliminar subvista específica?
cómo eliminar todos los contactos de mi iphone (3)
Cree un ivar que le ofrezca una referencia al nuevo viewController o solo a la vista. Iré por el controlador de la vista aquí
Añadir una propiedad y sintetizarla.
// .h
@property (nonatomic, strong) Location *location;
// .m
@synthesize location = _location;
Ahora cuando crees la ubicación, establece el ivar
Location *location = [[Location alloc] initWithNibName:@"Location" bundle:[NSBundle mainBundle]];
self.location = location;
[self.subView addSubview:location.view];
Ahora despues para quitarlo.
[self.location.view removeFromSuperview];
Nota al margen
En general, es un camino doloroso agregar la vista de un controlador de vista a la vista de otro como este. Para leer un poco acerca de esto, vea Abusando a UIViewControllers
Su nombre de Location
probablemente no sea excelente, puede ser más apropiado llamarlo algo como LocationViewController
o similar. La nomenclatura coherente de esta manera permite que cualquier otra persona (o tu futuro) pueda leer y comprender fácilmente que se trata de un controlador de vista sin abrir el encabezado.
He añadido subview (ViewController) a mi ViewController:
Location *location = [[Location alloc] initWithNibName:@"Location" bundle:[NSBundle mainBundle]];
[self.subView addSubview:location.view];
¿Cómo puedo eliminar esta subvista?
Sé que para eliminar todas las subvistas es:
for (UIView *subview in [self.view subviews]) {
[subview removeFromSuperview];
}
Simplemente puede establecer una etiqueta única para su vista que la identifique. Y luego cuando quieras quitarlo. Use el método de viewWithTag:(NSInteger)tag
para recuperarlo y eliminar solo este.
Location *location = [[Location alloc] initWithNibName:@"Location" bundle:[NSBundle mainBundle]];
location.tag = 8001; // 8001 is an exemple
[self.subView addSubview:location.view];
Y entonces
UIView * v = [self.subView viewWithTag:8001];
if (nil != v) {
[v removeFromSuperview];
}
Rápido y sucio: asigne una etiqueta a su vista, para que luego pueda identificarla:
Location *location = [[Location alloc] initWithNibName:@"Location" bundle:[NSBundle mainBundle]];
UIView *viewToAdd = location.view;
viewToAdd.tag = 17; //you can use any number you like
[self.view addSubview:viewToAdd];
Luego, para quitar:
UIView *viewToRemove = [self.view viewWithTag:17];
[viewToRemove removeFromSuperview];
Una alternativa más limpia, más rápida, más fácil de leer y de mantener sería crear una variable o propiedad para acceder a la vista:
En la interfaz:
@property (nonatomic, weak) UIView *locationView;
En la implementación:
Location *location = [[Location alloc] initWithNibName:@"Location" bundle:[NSBundle mainBundle]];
UIView *viewToAdd = location.view;
self.locationView = viewToAdd;
[self.view addSubview:viewToAdd];
Luego, para quitar:
[self.locationView removeFromSuperview];
Dicho esto, preste atención a las advertencias de los comentaristas sobre cómo jugar con las Vistas de otros ViewControllers. Lea sobre la contención de ViewController si desea hacerlo.