Eliminar una vista de una vista y agregarla a otra

Estoy tratando de encontrar todas mis vistas que están en la punta y agregarlas a mi vista de contenido.

Esto es lo que tengo, elimina con éxito la vista de self.view pero no la agrega a self.contentView

for (UIView *view in self.view.subviews) { if (view.tag != 666) { [view removeFromSuperview]; [self.contentView addSubview:view]; } } 

Cualquier ayuda sería apreciada.

El problema en su código es que, cuando llama a removeFromSuperview la vista padre la publicará. No hay necesidad de llamar a removeFromSuperview , solo agréguelo ya que la subvista de otra vista la eliminará de parentView actual.

Entonces usa:

 for (UIView *view in self.view.subviews) { if (view.tag != 666) { [self.contentView addSubview:view]; } } 

Según UIView Class Reference :

addSubview :

Agrega una vista al final de la list de subvistas del receptor.

- (void)addSubview:(UIView *)view

Parámetros

ver

 The view to be added. This view is retained by the receiver. After being added, this view appears on top of any other subviews. 

Discusión

Este método retiene la vista y establece su próximo respondedor al receptor, que es su nueva supervisión.

Las vistas solo pueden tener una supervisión. Si la vista ya tiene una supervisión y esa vista no es el receptor, este método elimina la supervisión anterior antes de hacer que el receptor sea su nueva supervisión .

No estoy seguro de si esto funcionaría, pero trate de cambiar [view removeFromSuperview]; y [self.contentView addSubview:view]; . Esto se debe a que de acuerdo con la UIView class de removeFromSuperview , removeFromSuperview hace que la supervisión supervise la vista.

¡Espero que esto ayude!

Para verificar los errores. Será mejor que imprima los frameworks de estas vistas (self.view, self.contentView). y hazlos de diferentes colors. Entonces puedes ver los errores. ¡Buena suerte!

contentView no pertenece a la propiedad de UIVew . Pertenece a la propiedad de UITableViewCell . Devuelve la vista de contenido del object de celda.

  for (UIView *v in innerMainView.subviews) { [v removeFromSuperview]; } [innerMainView addSubview:StandardView]; 

Puede establecer la vista especificada como una propiedad, o puede agregar la vista a la vista de contenido antes de eliminarla de la super visión. No estoy seguro de que cuando elimine la vista, si el recuento de retención de la vista se networkinguce a 0, llamará a la super visión para repartirlo.

Cuando elimine su vista de superView , se release de la memory . Entonces en tu caso necesitas hacer esto:

 UINib *infoNib = [UINib nibWithNibName:@"YourXIBFileName" bundle:nil]; NSArray *topLevelObjects = [infoNib instantiateWithOwner:self options:nil]; UIView *infoView = [topLevelObjects objectAtIndex:0]; for (UIView *view in infoView.subviews) { [self.contentView addSubview:view]; } }