ストーリーボードを使用して「子」という名前のビュー コントローラーを作成したいので、次のように定義します。
- (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)];
}
子View Controllerを含むルートView Controllerがあります
- (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:
絵コンテに指定されたものを常に使用しているからだと思います。
質問:
- ストーリーボードでView Controllerイニシャライザを使用することは可能ですか? appDelegate に似た no のように見えます。
- これは、ストーリーボードをアセンブリから直接使用する最も簡単な方法ですか?
- 複数のストーリーボードがある場合、ストーリーボードをパラメトリックに定義する方法はありますか? のようなもので終わりたくありません
storyBoard1, storyBoard2, ..., storyBoardN
。
前もって感謝します。