Is there anything similar to the viewDidLoad
of UIViewController
for a UIView
???
I need to be notified as soon as a UIView
has loaded (Subclass of UIView
), and perform some actions.
Asked
Active
Viewed 3.9k times
83
1 Answers
277
Depending on what kind of actions you need to perform, there are several techniques:
-(id)initWithFrame:(CGRect)frame
- UIView's designated initializer; always sent to a UIView to initialize it, unless the view is loaded from a nib;-(id)initWithCoder:(NSCoder *)coder
- always sent to initialize a UIView whenever the view is loaded from a nib;-(void)awakeFromNib
- sent after all the objects in the nib are initialized and connected; applicable only if you load the object from a nib; you must call super;-(void)willMoveToSuperview:(UIView *)newSuperview
- sent immediately before the view is added as a subview to another view;newSuperview
may be nil when you remove the view from its superview;-(void)willMoveToWindow:(UIWindow *)newWindow
- sent immediately before the view (or its superview) is added to a window;newWindow
may be nil when you remove the view from a window;-(void)didMoveToSuperview
- sent immediately after the view is inserted into a view hierarchy;-(void)didMoveToWindow
- sent immediately after the view gets its window property set. -
Basically, you can choose to perform your actions during initialization (1 & 2), after loading from a nib (3), before insertion into a view hierarchy (4 & 5) and after that (6 & 7).

Muhammad Nabeel Arif
- 19,140
- 8
- 51
- 70

Costique
- 23,712
- 4
- 76
- 79
-
Thanks a lot perfect answer (very detailed). I was modifying a segmented control and it wasn't displaying the changes because I was calling the modification method during init, I moved it to didMoveToWindow and it fixed all the problems – aryaxt Dec 21 '10 at 18:55
-
1It seems all of this happened before viewDidLoad in viewController – Alex Chan Apr 17 '15 at 08:53
-
3`-(void)willMoveToSuperview:(UIView *)newSuperview` was the cure to all my problems, thank you very much! – Erion S Jul 15 '15 at 15:05
-
I forgot again that some things do not work if you keep caling them inside a UIView at the very beginning of the initialization process..... So doing it in 7 or performing with delay from there will always work! :) – Alex Cio Dec 03 '16 at 23:51