UIView - Jak otrzymać powiadomienie, gdy widok zostanie załadowany?

79

Czy jest coś podobnego do viewDidLoadz UIViewControllerdla UIView??? Muszę zostać powiadomiony, gdy tylko UIViewzostanie załadowany (podklasa z UIView) i wykonam pewne czynności.

aryaxt
źródło

Odpowiedzi:

268

W zależności od tego, jakie czynności musisz wykonać, istnieje kilka technik:

  1. -(id)initWithFrame:(CGRect)frame- wyznaczony inicjator UIView; zawsze wysyłane do UIView w celu jego zainicjowania, chyba że widok jest ładowany z końcówki;
  2. -(id)initWithCoder:(NSCoder *)coder - wysyłane zawsze w celu zainicjowania UIView za każdym razem, gdy widok jest ładowany z końcówki;
  3. -(void)awakeFromNib- wysyłane po zainicjowaniu i połączeniu wszystkich obiektów w stalówce; ma zastosowanie tylko wtedy, gdy ładujesz obiekt ze stalówki; musisz zadzwonić super;
  4. -(void)willMoveToSuperview:(UIView *)newSuperview- wysyłane bezpośrednio przed dodaniem widoku jako podwidoku do innego widoku; newSuperviewmoże być zerowy, gdy usuniesz widok z jego nadzoru;
  5. -(void)willMoveToWindow:(UIWindow *)newWindow- wysyłane bezpośrednio przed dodaniem widoku (lub jego nadzoru) do okna; newWindowmoże być zerowy, gdy usuniesz widok z okna;
  6. -(void)didMoveToSuperview - wysyłane natychmiast po wstawieniu widoku do hierarchii widoków;
  7. -(void)didMoveToWindow- wysyłany natychmiast po tym, jak widok uzyska ustawioną właściwość okna. -

Zasadniczo możesz wybrać wykonanie akcji podczas inicjalizacji (1 i 2), po załadowaniu z końcówki (3), przed wstawieniem do hierarchii widoków (4 i 5) i po tym (6 i 7).

Costique
źródło
Wielkie dzięki za doskonałą odpowiedź (bardzo szczegółowa). Modyfikowałem segmentową kontrolkę i nie wyświetlała zmian, ponieważ wywoływałem metodę modyfikacji podczas init, przeniosłem ją do didMoveToWindow i naprawiłem wszystkie problemy
aryaxt
1
Wydaje się to wszystko zdarzyło się przed viewDidLoad w viewController
Alex Chan
3
-(void)willMoveToSuperview:(UIView *)newSuperviewbył lekarstwem na wszystkie moje problemy, bardzo dziękuję!
Erion S
Znowu zapomniałem, że niektóre rzeczy nie działają, jeśli będziesz je wywoływać w UIView na samym początku procesu inicjalizacji ..... Więc robienie tego w 7 lub wykonywanie z opóźnieniem z tego miejsca zawsze będzie działać! :)
Alex Cio