Sie können KVO (Schlüsselwertbeobachtung) verwenden, um eine Änderung des Werts der Eigenschaft hidden
zu erkennen.
Fügen Sie Ihren Beobachter (self
in diesem Beispiel) auf folgende Weise:
UIView* viewToObserve = [self getViewToObserve]; // implement getViewToObserve
[viewToObserve addObserver:self forKeyPath:@"hidden" options:0 context:NULL];
nun die folgende Methode Ihre Beobachter-Klasse hinzufügen:
- (void) observeValueForKeyPath:(NSString*)keyPath ofObject:(id)object change:(NSDictionary*)change context:(void*)context
{
UIView* viewToObserve = [self getViewToObserve];
if (object == viewToObserve)
{
if ([keyPath isEqualToString:@"hidden"])
{
// react to state change
}
}
}
Die Beobachter-Methode aufgerufen werden, wenn die hidden
Eigenschaft ändert seinen Wert. Wenn ich mich nicht irre, wird die Methode synchron im Kontext des Threads aufgerufen, der die Änderung an der Eigenschaft vornimmt. Wenn Sie eine asynchrone Benachrichtigung benötigen, können Sie diese selbst hinzufügen, zum Beispiel mit einer der Methoden NSObject
performSelector:withObject:afterDelay:
oder performSelector:onThread:withObject:waitUntilDone:
.
BTW: Sie brauchen die Prüfungen in der Beobachtermethode natürlich nicht, wenn Sie nur ein einzelnes Objekt und/oder eine Eigenschaft beobachten. Ich habe die Schecks zu Illustrationszwecken aufgegeben. Ich empfehle auch, die Dokumentation von Apple auf KVO und KVC (Schlüsselwertcodierung) zu lesen, um zu verstehen, was hier vor sich geht.
Die Laufzeit wird Ihren Beobachter weiterhin glücklich benachrichtigen, auch wenn der Beobachter freigegeben wird - was zu einem Anwendungsabsturz führt! Also vergessen Sie nicht, den Beobachter zu entfernen, bevor es ausgeschaltet ist zugeteilt, spätestens sollte dies geschehen, in der Beobachter dealloc
:
- (void) dealloc
{
UIView* viewToObserve = [self getViewToObserve];
[viewToObserve removeObserver:self forKeyPath:@"hidden"];
[super dealloc];
}
Mit „hidden Zustandswechsel“, meinen Sie eine Änderung an dem Wert des Eigenschaft "versteckt"? – herzbube
Was ist mit der Beobachtung der versteckten Eigenschaft der einzelnen Unteransichten (sowie der Sammlung der Unteransichten, damit Sie wissen, wann eine Ansicht hinzugefügt/entfernt wird) mit KVO? – lnafziger