UIView - Як отримувати сповіщення, коли подання завантажується?


79

Чи є що - небудь схоже на viewDidLoadпро UIViewControllerдля UIView??? Мені потрібно повідомити, як тільки a UIViewзавантажиться (підклас UIView), і виконати деякі дії.

Відповіді:


268

Залежно від того, який вид дій вам потрібно виконати, існує кілька прийомів:

  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).


Велике спасибі ідеальна відповідь (дуже детальна). Я модифікував сегментований елемент керування, і він не відображав змін, оскільки я викликав метод модифікації під час ініціювання, я перемістив його до didMoveToWindow, і це виправило всі проблеми
aryaxt

1
Здається, все це сталося до viewDidLoad in viewController
Alex Chan

3
-(void)willMoveToSuperview:(UIView *)newSuperviewбуло ліками від усіх моїх проблем, велике спасибі!
Erion S

Я знову забув, що деякі речі не працюють, якщо ви продовжуєте заспокоювати їх всередині UIView на самому початку процесу ініціалізації ..... Тож робити це за 7 або виконувати з затримкою звідти завжди буде працювати! :)
Alex Cio
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.