man*_*urt 58 uiviewcontroller uiview ios
在ViewController中,ViewDidLoad可以知道VC何时加载.
对于UIView,在加载视图时我必须使用什么方法?
是否可以使用任何init调用此方法?
编辑:没有XIB,只是以编程方式.
实际上,对于视图的初始化,您不必对视图控制器的方法viewDidLoad()执行任何操作.您想要做的就是,您可以在视图的init方法中执行.例如,在视图控制器的viewDidLoad()中,有一些初始化代码:
- (void)viewDidLoad{
[super viewDidLoad];
// init your parameters here
}
Run Code Online (Sandbox Code Playgroud)
类似地,在您的视图的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;
}
Run Code Online (Sandbox Code Playgroud)
然后,您从视图控制器创建YourView,如下所示:
YourView view = [[YourView alloc] initWithDelegate:self];
[self.view addSubview:view];
[view release];
Run Code Online (Sandbox Code Playgroud)
此外,您在视图加载时要执行的操作,可以在视图中放置layoutSubviews方法,如下所示:
-(void)layoutSubviews{
[super layoutSubviews];
// init your parameters here, like set up fonts, colors, etc...
}
Run Code Online (Sandbox Code Playgroud)
我想,这就是你所需要的.
干杯!
斯威夫特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.
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用willMove(toSuperview newSuperview:UIView?)
import UIKit
final class myView: UIView {
override func willMove(toSuperview newSuperview: UIView?) {
super.willMove(toSuperview: newSuperview)
//Do stuff here
}
}
Run Code Online (Sandbox Code Playgroud)