Kann KVO Änderungen im Subview-Array einer UIView beobachten?

8

Ich habe überall nach einer Antwort gesucht, und ich habe versucht, es zu implementieren, aber nichts funktioniert. Grundsätzlich muss ich in der Lage sein, Änderungen im Subview-Array einer VC-Ansicht zu beobachten. Wenn eine vorhandene Ansicht aus diesem Array entfernt wird, möchte ich darüber informiert werden und Code ausführen.

Ist es möglich?

BEARBEITEN - Weitere Informationen

Ich versuche eine Lösung für einen seltsamen Edge Case Bug zu finden, bei dem das schnelle Antippen der UISearchBar eines UISearchDisplayControllers (sehr benutzerdefiniert) dazu führt, dass der sdController (oder besser die managed searchBar im navBar Effekt) aus der View verschwindet sdController ist NOCH AKTIV. Das bedeutet, dass die navBar am Ursprung -y bleibt und die folgende Tabelle nicht scrollbar ist.

Mein ursprünglicher Gedanke war, zu einem Zustand zu kommen, in dem der sdController aktiv war, aber die UISearchDisplayControllerContainerView war nicht in der View-Hierarchie. Ich habe versucht, dies in der VC-AnsichtDidLayoutSubviews zu testen, aber leider, wenn Sie auf eine Suchleiste tippen und die Animation sdController initiieren, ist der SdController aktiv und die UISearchDisplayControllerContainerView ist nicht in der Ansichtshierarchie: (.

    
Lizza 06.11.2014, 18:35
quelle

3 Antworten

3

Wie bei den meisten Eigenschaften in Apples Frameworks ist subviews nicht KVO-kompatibel .

Wenn Sie entweder die Unteransicht oder die Superansicht steuern, können Sie Änderungen an der Ansichtshierarchie durch Unterklassen und Überschreiben beobachten:

In der Superview müssen Sie überschreiben ...

%Vor%

... oder, wenn Sie die Unteransicht steuern, würden Sie überschreiben ...

%Vor%

Beide Methoden werden aufgerufen, bevor die Ansicht entfernt wird.

    
Nikolai Ruhe 06.11.2014, 20:24
quelle
11

Sie können die Eigenschaft sublayers von CALayer, die KVO-kompatibel ist, anstelle von UIView subviews beobachten.

    
Vladimir Ozerov 08.04.2015 16:06
quelle
1

Swift 3.x

Verwenden Sie benutzerdefinierte Ansicht iike

%Vor%     
SPatel 06.09.2017 18:02
quelle