UIView — Как получать уведомления при загрузке представления?

#ios #objective-c #iphone #uiview #viewdidload

#iOS #objective-c #iPhone #uiview #viewdidload

Вопрос:

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

Ответ №1:

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

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

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

Комментарии:

1. Большое спасибо за идеальный ответ (очень подробный). Я изменял сегментированный элемент управления, и он не отображал изменения, потому что я вызывал метод модификации во время инициализации, я переместил его в didMoveToWindow, и это устранило все проблемы

2. Кажется, все это произошло до viewDidLoad в ViewController

3. -(void)willMoveToSuperview:(UIView *)newSuperview это было решение всех моих проблем, большое вам спасибо!

4. Я снова забыл, что некоторые вещи не работают, если вы продолжаете вызывать их внутри UIView в самом начале процесса инициализации….. Так что выполнение этого в 7 или выполнение с задержкой оттуда всегда будет работать! 🙂