我想用故事板创建一个名为“孩子”视图控制器,所以我定义:台风利用与故事板视图控制器的初始化
- (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:
,故事板指定的那个。
问题:
- 可以使用视图控制器的初始化故事板?它看起来不是,类似于AppDelegate。
- 这是从装配中直接使用故事板的最简单方法吗?
- 如果我有几个故事板,是否有参数化定义故事板的方法?我不想最终得到像
storyBoard1, storyBoard2, ..., storyBoardN
这样的东西。
在此先感谢。
感谢您的及时响应!关于答案: 1.完全可以。 2.我已经在使用plist,但仍然需要创建一个包含故事板中VC的根VC。 3.我已经尝试过了,但它在'validateScope'中引发了一个异常,说“运行时参数注入只适用于原型和对象图的作用域定义,但为定义设置:TyphoonStoryboard” – 7ynk3r 2014-10-31 18:29:02
2.您是否正在使用plist故事板(UIMainStoryboardFile plist键)?在这种情况下,根视图控制器自动设置。 3.正确。你确定你在这里需要单身吗? Storyboard已经由其生成的viewControllers保留。 – Aleksey 2014-10-31 18:34:03
2.在我的情况下,根视图控制器是一个没有故事板的自定义视图控制器。 3.删除单例作用域后,我收到'doRegistration'中的错误'Key'storyboardWithName:'已经注册了' – 7ynk3r 2014-10-31 20:05:10