#ios #objective-c #iphone #uiview #viewdidload
#iOS #objective-c #iPhone #uiview #viewdidload
Вопрос:
Есть ли что-нибудь похожее на viewDidLoad
of UIViewController
для UIView
??? Мне нужно получать уведомления сразу после UIView
загрузки (подкласс UIView
) и выполнять некоторые действия.
Ответ №1:
В зависимости от того, какие действия вам нужно выполнить, существует несколько методов:
-(id)initWithFrame:(CGRect)frame
— Назначенный инициализатор UIView; всегда отправляется в UIView для его инициализации, если только представление не загружено с кончика;-(id)initWithCoder:(NSCoder *)coder
— всегда отправляется для инициализации UIView всякий раз, когда представление загружается из кончика;-(void)awakeFromNib
— отправляется после инициализации и подключения всех объектов в nib; применимо, только если вы загружаете объект из nib; вы должны вызвать super;-(void)willMoveToSuperview:(UIView *)newSuperview
— отправляется непосредственно перед добавлением представления в качестве подвида в другое представление;newSuperview
может быть равно нулю при удалении представления из его супервизора;-(void)willMoveToWindow:(UIWindow *)newWindow
— отправляется непосредственно перед добавлением представления (или его супервизора) в окно;newWindow
может быть равен нулю при удалении представления из окна;-(void)didMoveToSuperview
— отправляется сразу после вставки представления в иерархию представлений;-(void)didMoveToWindow
— отправляется сразу после того, как для представления установлено свойство window. —
В принципе, вы можете выполнять свои действия во время инициализации (1 и 2), после загрузки с кончика (3), перед вставкой в иерархию представлений (4 и 5) и после этого (6 и 7).
Комментарии:
1. Большое спасибо за идеальный ответ (очень подробный). Я изменял сегментированный элемент управления, и он не отображал изменения, потому что я вызывал метод модификации во время инициализации, я переместил его в didMoveToWindow, и это устранило все проблемы
2. Кажется, все это произошло до viewDidLoad в ViewController
3.
-(void)willMoveToSuperview:(UIView *)newSuperview
это было решение всех моих проблем, большое вам спасибо!4. Я снова забыл, что некоторые вещи не работают, если вы продолжаете вызывать их внутри UIView в самом начале процесса инициализации….. Так что выполнение этого в 7 или выполнение с задержкой оттуда всегда будет работать! 🙂