我想用故事板創建一個名爲「孩子」視圖控制器,所以我定義:颱風利用與故事板視圖控制器的初始化
- (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