2010-06-19 8 views
8

Wygląda na to, że UIView nie ma metod takich jak "didRemoveFromSuperview" lub "willRemoveFromSuperview". Następnie, Jak słuchać zdarzenia, gdy UIView usunięte z jego superView? Powinienem użyć KVO? z góry dziękuję!Jak otrzymać powiadomienie, gdy UIView odłączy się od swojego superView?

+0

Wiesz kiedy rzutem zostanie usunięty, ponieważ to zrobić w kodzie tak? Wystarczy podłączyć tam swój kod lub funkcję pomocnika. – Eiko

Odpowiedz

4

Możesz podklasować swoje UIView i wysyłać powiadomienia z jego metody - (void)removeFromSuperview.

+12

Plik .Api doc mówi: willMoveToSuperview: Poinformuje odbiorcę, że jego superview ma zamiar zmienić na określony superview (który może być zerowy). ----------------------------------------- Gdy ta metoda jest wywoływana i parametr jest zerowy, widok jest usuwany – Jagie

19

Ten temat jest dość stary, ale znalazłem sposób, aby to zrobić .Od wyszukiwarka google nie był na tyle pomocne, tutaj jest (zaczerpnięte z docs UIView za)

Obserwując Zobacz zmian związanych

- didAddSubview:

- willRemoveSubview:

- willMoveToSuperview:

- didMoveToSuperview

- willMoveToWindow:

- didMoveToWindow

13

to działa (testowane na systemów iOS 8):

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

According to the UIView docs:

Domyślna implementacja tego metoda zrobić nic nie ma. Podklasy mogą go przesłonić, aby wykonać dodatkowe akcje za każdym razem, gdy zmienia się okno.

Okno Właściwości może być zerowa ... Dzieje się tak, gdy odbiornik został właśnie usunięty z jej SuperView lub gdy odbiornik został właśnie dodany do SuperView, który nie jest dołączony do okna.

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