如何使用程序集中定义的多个故事板?
How to use multiple storyboards defined in assemblies?
我针对不同的用例使用不同的故事板。我的问题是如何通过它的故事板标识符实例化一个故事板,一个视图控制器并将它连接到实际的 viewcontroller class?
这是我现在所在的位置:
public dynamic func loadingViewController() -> AnyObject {
return TyphoonDefinition.withClass(LoadingViewController.self) {
(definition) in
definition.injectProperty("presenter", with: self.loadingPresenter())
}
// return TyphoonDefinition.withFactory(self.storyboard(), selector: "instantiateViewControllerWithIdentifier:") {
// (factory) in
//
// factory.injectParameterWith("LoadingViewController")
//
// }
}
public dynamic func storyboard() -> AnyObject {
return TyphoonDefinition.withClass(TyphoonStoryboard.self) {
(definition) in
definition.useInitializer("storyboardWithName:factory:bundle:") {
(initializer) in
initializer.injectParameterWith("Loading")
initializer.injectParameterWith(self)
initializer.injectParameterWith(NSBundle.mainBundle())
}
definition.scope = TyphoonScope.Singleton
}
}
在此示例中,情节提要的名称为 'Loading',viewcontroller 为 'LoadingViewController',情节提要标识符也为 'LoadingViewController'。
任何帮助(或示例代码)将不胜感激!
创建一个代表将从故事板发出的 UIViewController 的 TyphoonDefinition:
为故事板创建一个定义:
- (UIStoryboard *)storyboard
{
return [TyphoonDefinition withClass:[TyphoonStoryboard class]
configuration:^(TyphoonDefinition *definition) {
[definition useInitializer:@selector(storyboardWithName:factory:bundle:)
parameters:^(TyphoonMethod *initializer) {
[initializer injectParameterWith:@"StoryboardName"];
[initializer injectParameterWith:self];
[initializer injectParameterWith:[NSBundle mainBundle]];
}];
}];
}
如果您想实例化故事板中标记为 'initial' 控制器的控制器:
- (UIViewController *)initialControllerFromStoryBoard
{
return [TyphoonDefinition withFactory:[self storyboard]
selector:@selector(instantiateInitialViewController)];
}
如果您想在故事板中实例化另一个控制器:
- (UIViewController *)arbitraryControllerFromStoryboard
{
return [TyphoonDefinition withFactory:[self storyboard]
selector:@selector(instantiateViewControllerWithIdentifier:)
parameters:^(TyphoonMethod *factoryMethod) {
[factoryMethod injectParameterWith:@"ViewControllerId"];
}];
}
很抱歉在 Objective-C 中回复,但我 Swift 目前还没有准备好。
我针对不同的用例使用不同的故事板。我的问题是如何通过它的故事板标识符实例化一个故事板,一个视图控制器并将它连接到实际的 viewcontroller class?
这是我现在所在的位置:
public dynamic func loadingViewController() -> AnyObject {
return TyphoonDefinition.withClass(LoadingViewController.self) {
(definition) in
definition.injectProperty("presenter", with: self.loadingPresenter())
}
// return TyphoonDefinition.withFactory(self.storyboard(), selector: "instantiateViewControllerWithIdentifier:") {
// (factory) in
//
// factory.injectParameterWith("LoadingViewController")
//
// }
}
public dynamic func storyboard() -> AnyObject {
return TyphoonDefinition.withClass(TyphoonStoryboard.self) {
(definition) in
definition.useInitializer("storyboardWithName:factory:bundle:") {
(initializer) in
initializer.injectParameterWith("Loading")
initializer.injectParameterWith(self)
initializer.injectParameterWith(NSBundle.mainBundle())
}
definition.scope = TyphoonScope.Singleton
}
}
在此示例中,情节提要的名称为 'Loading',viewcontroller 为 'LoadingViewController',情节提要标识符也为 'LoadingViewController'。
任何帮助(或示例代码)将不胜感激!
创建一个代表将从故事板发出的 UIViewController 的 TyphoonDefinition:
为故事板创建一个定义:
- (UIStoryboard *)storyboard
{
return [TyphoonDefinition withClass:[TyphoonStoryboard class]
configuration:^(TyphoonDefinition *definition) {
[definition useInitializer:@selector(storyboardWithName:factory:bundle:)
parameters:^(TyphoonMethod *initializer) {
[initializer injectParameterWith:@"StoryboardName"];
[initializer injectParameterWith:self];
[initializer injectParameterWith:[NSBundle mainBundle]];
}];
}];
}
如果您想实例化故事板中标记为 'initial' 控制器的控制器:
- (UIViewController *)initialControllerFromStoryBoard
{
return [TyphoonDefinition withFactory:[self storyboard]
selector:@selector(instantiateInitialViewController)];
}
如果您想在故事板中实例化另一个控制器:
- (UIViewController *)arbitraryControllerFromStoryboard
{
return [TyphoonDefinition withFactory:[self storyboard]
selector:@selector(instantiateViewControllerWithIdentifier:)
parameters:^(TyphoonMethod *factoryMethod) {
[factoryMethod injectParameterWith:@"ViewControllerId"];
}];
}
很抱歉在 Objective-C 中回复,但我 Swift 目前还没有准备好。