有没有办法在调用viewDidLoad之前提供一个带参数的Xib文件手动加载的视图>>因为我需要在viewDidLoad中找到这些参数?
我正在使用以下代码加载Xib文件:
NSBundle.mainBundle().loadNibNamed(name, owner: owner, options: options)
然后立即调用viewDidLoad方法。显然没有办法手动覆盖和调用任何初始化程序。
我不确定选项参数的作用。它可以用于为加载的Xib视图控制器提供参数吗?
答案 0 :(得分:0)
我不知道将选项传递给手动加载的nib的方法。 我将采取的方式之一是:
在这两种情况下,实例化视图控制器的实体必须在推送视图控制器之前设置属性或块。 这将起作用,因为viewDidLoad方法is called just the first time the view is accessed,所以你仍然有时间在loadNibName和实际加载视图控制器的视图之间。
使用代码更新
您必须将实例属性添加到
class YourViewController: UIViewController {
var setupOptions: [String: String]
...
}
然后,来自来电者:
YourViewController *yourVC = NSBundle.mainBundle().loadNibNamed(name, owner: owner, options: nil)[0]
yourVC.setupOptions = ["key1" : "val1", "key2" : "val2"]
// Then push the controller to the hierarchy. Only after this the viewDidLoad is called.
// You will be then able to use the stored setupOptions for any custom initialization.
这当然只是一个例子。 setupOptions 的性质取决于您的使用案例。
答案 1 :(得分:0)
这可能是一种更先进,更优雅的方法来解决这个问题,但我设法让它采用了这样一种不太优雅的方法:
答案 2 :(得分:0)
我的解决方案是让您的viewDidLoad方法保持清晰。.
然后,在设置属性后,调用将使用这些属性的自定义方法,如下所示:
MyCustomController.h
- (void)setupView;
@property (strong, nonatomic) NSString *test;
MyCustomController.m
- (void)viewDidLoad {
[super viewDidLoad];
}
- (void)setupView {
// this will work perfectly because this method is being
// called AFTER self.test is set
NSLog(@"test: %@", self.test);
}
用法:
- (void)goToNextController {
MyCustomController *controller = [[NSBundle mainBundle] loadNibNamed:@"MyCustomController" owner:self options:nil];
// viewDidLoad will be called at this point..
// so setting properties here will be useless.
controller.test = @"our custom message here";
[controller setupView];
// so after our property('s) are set.. we call the "setupView" method.
// the output would be: "test: our custom message here".
}