UIView - Wie werde ich benachrichtigt, wenn die Ansicht geladen wird?


79

Gibt es etwas ähnlich wie die viewDidLoadvon UIViewControllerfür ein UIView??? Ich muss benachrichtigt werden, sobald ein UIViewgeladen wurde (Unterklasse von UIView), und einige Aktionen ausführen.

Antworten:


268

Abhängig davon, welche Art von Aktionen Sie ausführen müssen, gibt es verschiedene Techniken:

  1. -(id)initWithFrame:(CGRect)frame- UIViews designierter Initialisierer; Wird immer an eine UIView gesendet, um sie zu initialisieren, es sei denn, die Ansicht wird von einer Schreibfeder geladen.
  2. -(id)initWithCoder:(NSCoder *)coder - wird immer gesendet, um eine UIView zu initialisieren, wenn die Ansicht von einer Schreibfeder geladen wird;
  3. -(void)awakeFromNib- gesendet, nachdem alle Objekte in der Feder initialisiert und verbunden wurden; Nur anwendbar, wenn Sie das Objekt von einer Schreibfeder laden. du musst super anrufen;
  4. -(void)willMoveToSuperview:(UIView *)newSuperview- unmittelbar vor dem Hinzufügen der Ansicht als Unteransicht zu einer anderen Ansicht gesendet werden; newSuperviewkann Null sein, wenn Sie die Ansicht aus der Übersicht entfernen;
  5. -(void)willMoveToWindow:(UIWindow *)newWindow- unmittelbar vor dem Hinzufügen der Ansicht (oder ihrer Übersicht) zu einem Fenster gesendet werden; newWindowkann Null sein, wenn Sie die Ansicht aus einem Fenster entfernen;
  6. -(void)didMoveToSuperview - sofort gesendet, nachdem die Ansicht in eine Ansichtshierarchie eingefügt wurde;
  7. -(void)didMoveToWindow- wird sofort gesendet, nachdem die Ansichtseigenschaft der Ansicht festgelegt wurde. - -

Grundsätzlich können Sie festlegen, dass Ihre Aktionen während der Initialisierung (1 & 2), nach dem Laden von einer Schreibfeder (3), vor dem Einfügen in eine Ansichtshierarchie (4 & 5) und danach (6 & 7) ausgeführt werden sollen.


Vielen Dank perfekte Antwort (sehr detailliert). Ich habe ein segmentiertes Steuerelement geändert und es hat die Änderungen nicht angezeigt, da ich die Änderungsmethode während der Init aufgerufen habe. Ich habe sie nach didMoveToWindow verschoben und alle Probleme
behoben

1
Es scheint, dass all dies vor viewDidLoad in viewController
Alex Chan

3
-(void)willMoveToSuperview:(UIView *)newSuperviewwar die Heilung für alle meine Probleme, vielen Dank!
Erion S

Ich habe wieder vergessen, dass einige Dinge nicht funktionieren, wenn Sie sie zu Beginn des Initialisierungsprozesses in einem UIView weiter kalibrieren. :)
Alex Cio
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.