2010-06-19 4 views
8

Parece que UIView no tiene métodos como "didRemoveFromSuperview" o "willRemoveFromSuperview". Luego, ¿cómo escuchar el evento cuando se elimina una UIView de su supervista? ¿Debo usar KVO? ¡gracias por adelantado!¿Cómo se notifica cuando un UIView se separa de su supervista?

+0

Usted sabe cuando se retira una vista, porque lo haces de código de todos modos? Simplemente conecte allí su código, o una función de ayuda. – Eiko

Respuesta

4

Puede subclasificar su UIView y publicar notificaciones desde su método - (void)removeFromSuperview.

+12

Encontré.Api doc dice: willMoveToSuperview: Informa al receptor que su superview está a punto de cambiar a la supervista especificada (que puede ser nula). ----------------------------------------- Cuando se llama este método y el parámetro es nulo, la vista se está eliminando – Jagie

19

Este tema es bastante antiguo, pero he encontrado una manera de hacerlo .Desde Google búsqueda no era lo suficientemente útil, aquí está (tomado de documentos de UIView)

observar cambios Ver Relacionada

- didAddSubview:

- willRemoveSubview:

- willMoveToSuperview:

- didMoveToSuperview

- willMoveToWindow:

- didMoveToWindow

13

esto funciona (probado en iOS8):

-(void) didMoveToWindow { 
    [super didMoveToWindow]; // (does nothing by default) 
    if (self.window == nil) { 
     // YOUR CODE FOR WHEN UIVIEW IS REMOVED 
    } 
} 

According to the UIView docs:

La implementación predeterminada de este método hacer es nada. Las subclases pueden anularlo para realizar acciones adicionales cada vez que cambia la ventana.

La propiedad ventana puede ser nulo ... Esto ocurre cuando el receptor acaba de ser retirado de su supervista o cuando el receptor acaba de ser añadido a un supervista que no está conectado a una ventana.

0
- (void) willMoveToSuperview: (UIView *) newSuperview{ 
    if(newSuperview == nil){ 
     // UIView was removed from superview 
    } else { 
     // UIView was added to superview 
    } 
} 
Cuestiones relacionadas