iOS viewDidLoad for UIView

在ViewController中,有ViewDidLoad知道VC何时加载。

对于一个UIView,当视图加载时,我必须使用什么方法?

这个方法是否会被任何init调用?

编辑:没有XIB,只是以编程方式。

它不是这样的。

- (void)viewDidLoad当视图控制器被加载时,不调用- (void)viewDidLoad ; 当视图控制器的视图被加载时被调用。

所以你可以创buildUIViewController,唯一可以调用的方法是初始化它的初始化方法。 视图不会被创build, – (void)viewDidLoad方法不被调用,等等

然后当别的东西要求视图控制器的视图时,通过:

 viewController.view; 

视图控制器然后调用:

 - (void)loadView; // This is where you put your own loading view information, and set the viewController's self.view property here. 

其次是:

 - (void)viewDidLoad; 

视图加载是一个单独的方法,所以你不必中断实际的loadView方法和复杂的视图加载选项。 在使用nib等时,如果子类化和覆盖loadView方法,当开发人员不确定苹果在做什么以及他们的最佳实践是什么时,会导致问题,所以苹果将这种方法分开是明智的。

然后,当内存警告来到视图被释放,并设置为零:

 - (void)viewWillUnload; // view unloaded and set to nil. - (void)viewDidUnload; 

如果从XIB文件加载它,则从XIB加载时将调用awakeFromNib方法。

编辑在没有XIB的情况下,您可能必须使用文档的“ 观察视图相关更改”区域中的某个方法(例如,didMoveToSuperview)来推断它。 不过,更好的方法是从viewDidLoad方法的视图控制器发送消息到您的视图。

实际上,对于您的视图的初始化,您不必为视图控制器的方法viewDidLoad()做任何事情。 所有你想要做的,你可以在视图的初始化方法。 例如,在视图控制器的viewDidLoad()中,有一些初始化代码:

 - (void)viewDidLoad{ [super viewDidLoad]; // init your parameters here } 

类似地,在你的视图的init方法中:

 - (id)initWithDelegate:(id)_delegate { self = [[[[NSBundle mainBundle] loadNibNamed:@"YourView" owner:self options:nil] objectAtIndex:0] retain]; if (self) { [super init]; self.delegate = _delegate; // init your parameters here return self; } return nil; } 

然后,你从视图控制器创buildYourView像这样:

 YourView view = [[YourView alloc] initWithDelegate:self]; [self.view addSubview:view]; [view release]; 

此外,当你的视图加载的时候你想要做的事情,你可以在你的视图中放置layoutSubviews方法,如下所示:

 -(void)layoutSubviews{ [super layoutSubviews]; // init your parameters here, like set up fonts, colors, etc... } 

我想,那是你需要的。

干杯!

Swift 2:

 import UIKit class myView: UIView { override func layoutSubviews() { print("run when UIView appears on screen") // you can update your label's text or etc. } } 

我有类似的问题,发现相对容易的解决scheme。 想法是将viewDidLoad发送到每个子视图,并在您感兴趣的类上重载该方法。

要做到这一点,在你的类中添加这部分代码…

 // UIViewController - (void)viewDidLoad { [super viewDidLoad]; [self.view viewDidLoad]; } // UIView+Loading.m #import < UIKit/UIKit.h> @implementation UIView (Loading) - (void)viewDidLoad { for (UIView* subview in self.subviews) [subview viewDidLoad]; } @end // UIView+Loading.h #import < UIKit/UIKit.h> @interface UIView (Loading) - (void)viewDidLoad; @end // UIView_CustomImplementation - (void)viewDidLoad { NSLog(@"Do whatever you want to do in custom UIView after method viewDidLoad on UIViewController was called"); } 

据我所知,除了初始化之外,我不认为有这样的方法。 通常我会在init方法中做准备。 您可以创build自己的viewDidLoad方法并手动调用它。 但大多数时候,UIView是由它的视图控制器来pipe理的,所以视图控制器应该知道视图何时加载,如果你想configuration视图,你可以在视图控制器中进行。 顺便说一句, viewDidLoad方法并不总是被调用。