Как использовать несколько раскадровок, определенных в сборках?
Я использую разные раскадровки для разных вариантов использования. Мой вопрос заключается в том, как мне создать экземпляр раскадровки, контроллера представления по его идентификатору раскадровки и подключить его к реальному классу view controller?
Вот где я сейчас нахожусь:
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
}
}
В этом примере имя раскадровки - "Загрузка", view controller - "Загрузка ViewController", а идентификатор раскадровки - "Загрузка ViewController".
Любая помощь (или пример кода) будет принята с благодарностью!
1 ответ
Чтобы создать TyphoonDefinition, представляющий UIViewController, который будет генерироваться из раскадровки:
Создайте определение для раскадровки:
- (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]];
}];
}];
}
Если вы хотите создать экземпляр контроллера, помеченного как "начальный" контроллер в раскадровке:
- (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, но в данный момент у меня нет свиных отбивных.