UIView - как получить уведомление, когда представление загружено?

Есть ли что-нибудь похожее на viewDidLoad из UIViewController для _3 _ ??? Мне нужно получить уведомление, как только загрузится UIView (подкласс UIView), и выполнить некоторые действия.


person aryaxt    schedule 21.12.2010    source источник


Ответы (1)


В зависимости от того, какие действия вам нужно выполнить, существует несколько приемов:

  1. -(id)initWithFrame:(CGRect)frame - назначенный инициализатор UIView; всегда отправляется в UIView для его инициализации, если только представление не загружается из пера;
  2. -(id)initWithCoder:(NSCoder *)coder - всегда отправляется для инициализации UIView всякий раз, когда представление загружается из пера;
  3. -(void)awakeFromNib - отправляется после того, как все объекты в пике инициализированы и подключены; применимо, только если вы загружаете объект из пера; вы должны позвонить супер;
  4. -(void)willMoveToSuperview:(UIView *)newSuperview - отправляется непосредственно перед добавлением представления в качестве подпредставления к другому представлению; newSuperview может быть нулевым, когда вы удаляете представление из его супервизора;
  5. -(void)willMoveToWindow:(UIWindow *)newWindow - отправляется непосредственно перед добавлением представления (или его супервизора) в окно; newWindow может быть нулевым, когда вы убираете представление из окна;
  6. -(void)didMoveToSuperview - отправляется сразу после вставки представления в иерархию представлений;
  7. -(void)didMoveToWindow - отправляется сразу после того, как представление получает набор свойств окна. -

По сути, вы можете выполнять свои действия во время инициализации (1 и 2), после загрузки из пера (3), перед вставкой в ​​иерархию представлений (4 и 5) и после этого (6 и 7).

person Costique    schedule 21.12.2010
comment
Большое спасибо, отличный ответ (очень подробный). Я изменял сегментированный элемент управления, и он не отображал изменения, потому что я вызывал метод модификации во время инициализации, я переместил его в didMoveToWindow, и он устранил все проблемы. - person aryaxt; 21.12.2010
comment
Кажется, все это произошло до viewDidLoad в viewController - person Alex Chan; 17.04.2015
comment
-(void)willMoveToSuperview:(UIView *)newSuperview был лекарством от всех моих проблем, большое вам спасибо! - person Erion S; 15.07.2015
comment
Я снова забыл, что некоторые вещи не работают, если вы продолжаете вызывать их внутри UIView в самом начале процесса инициализации ..... Так что выполнение этого в 7 или выполнение с задержкой оттуда всегда будет работать! :) - person Alex Cio; 04.12.2016