我想使用故事板来创建一个名为“child”的视图控制器,因此我定义如下:
我将有一个根视图控制器,其中包含子视图控制器。
最后一部分是为了为子视图控制器注入依赖项:
- (TyphoonStoryboard *)storyBoard
{
return [TyphoonDefinition withClass:[TyphoonStoryboard class] configuration:^(TyphoonDefinition* definition) {
[definition useInitializer:@selector(storyboardWithName:factory:bundle:) parameters:^(TyphoonMethod *initializer) {
[initializer injectParameterWith:@"Storyboard"];
[initializer injectParameterWith:self];
[initializer injectParameterWith:[NSBundle mainBundle]];
}];
definition.scope = TyphoonScopeSingleton; //Let's make this a singleton
}];
}
- (ChildViewController *)childViewControllerFromStoryboard
{
return [TyphoonDefinition withFactory:self.storyBoard selector:@selector(instantiateInitialViewController)];
}
我将有一个根视图控制器,其中包含子视图控制器。
- (RootViewController *)rootViewController {
return [TyphoonDefinition withClass:[RootViewController class] configuration:^(TyphoonDefinition *definition) {
[definition useInitializer:@selector(initWithChildViewController:) parameters:^(TyphoonMethod *initializer) {
[initializer injectParameterWith:self.childViewControllerFromStoryboard];
}];
}];
}
最后一部分是为了为子视图控制器注入依赖项:
- (ChildViewController *)childViewController {
return [TyphoonDefinition withClass:[ChildViewController class] configuration:^(TyphoonDefinition *definition) {
// Initilization doesn't work.
[definition useInitializer:@selector(initWithData:) parameters:^(TyphoonMethod *initializer) {
[initializer injectParameterWith:self.data];
}];
// Property injection does.
// [definition injectProperty:@selector(data)]
}];
}
非常正常,我只是使用它的初始化程序但它从未被调用。我认为这是因为始终使用initWithCoder:
,这是指定给storyboards的那个。
问题:
- 是否可以使用视图控制器的初始化程序与storyboards一起使用?看起来不行,类似于appDelegate。
- 这是直接从组件上使用storyboards的最简单方法吗?
- 如果我有几个storyboard,有没有一种定义参数化storyboard的方法?我不想最终得到像
storyBoard1、storyBoard2、...,storyBoardN
这样的东西。
提前感谢。
validateScope
中引发异常,说“运行时参数注入仅适用于原型和对象图作用域定义,但已设置为定义:TyphoonStoryboard”。