2010-06-19 6 views
8

Es scheint, dass die UIView hat keine Methoden wie "didRemoveFromSuperview" oder "willRemoveFromSuperview". Dann, wie auf das Ereignis zu hören, wenn eine UIView aus seinem superView entfernt? Ich sollte KVO verwenden? Danke im Voraus!Wie wird benachrichtigt, wenn ein UIView von seinem SuperView getrennt wird?

+0

Sie wissen, wann eine Ansicht entfernt wird, weil man es sowieso in Code tun? Schließen Sie einfach Ihren Code dort oder eine Hilfsfunktion an. – Eiko

Antwort

4

Sie können Ihre UIView von Unterklassen ableiten und Benachrichtigungen von ihrer - (void)removeFromSuperview-Methode senden.

+12

Ich finde.Api Doc sagt: willMoveToSuperview: Informiert den Empfänger, dass seine Superview im Begriff ist, in die angegebene Superview (die möglicherweise Null sein) zu ändern. ----------------------------------------- Wenn diese Methode aufgerufen wird und Der Parameter ist null, die Ansicht wird entfernt – Jagie

19

Dieses Thema ist ziemlich alt, aber ich habe einen Weg gefunden, es zu tun .Seit Google-Suche nicht genug hilfreich war, hier ist es (von UIView der docs genommen)

Beobachten View-Related Changes

- didAddSubview:

- willRemoveSubview:

- willMoveToSuperview:

- didMoveToSuperview

- willMoveToWindow:

- didMoveToWindow

13

Das funktioniert (getestet auf 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:

Die Standardimplementierung dieser Methode tun Es ist nichts. Unterklassen können sie überschreiben, um zusätzliche Aktionen auszuführen, wenn sich das Fenster ändert.

Die Fenstereigenschaft sein kann nil ... Dies geschieht, wenn der Empfänger von seinem Super gerade entfernt worden oder wenn der Empfänger wurde nur zu einem Superview hinzugefügt, die nicht an ein Fenster angebracht ist.

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