如何使用故事板控制View Controller的创建?在这里阅读了有关封装和封装的好处的信息。单身人士的问题,我重构了我的代码。 我使用工厂来实例化我的vc&为他们提供依赖。但现在我想使用故事板。有没有办法让故事板调用工厂方法?目前,当我需要实例化子视图控制器时,我有这样的代码:
UIViewController *vc = [self.factory buildChildViewController];
并在工厂方法中处理所有依赖项:
- (UIViewController*) buildChildViewController {
ChildViewController *cvc = [[ChildViewController alloc] initWithNibName:nil bundle:nil];
[cvc setDatabase:self.database];
[cvc setQuery:[self buildSomeQuery:cvc]];
return cvc;
}
答案 0 :(得分:2)
为此,您必须继承UIStoryBoard
并覆盖-instantiateViewControllerWithIdentifier:
。但是,似乎无法将类分配给故事板文件。
但是,您可以通过视图控制器中的- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
向控制器提供依赖项。
我认为故事板不是为了重复使用,它只是简化了将可重用组件连接在一起的过程。就OOP而言,这不是一个好的解决方案。
答案 1 :(得分:1)
我一直在使用本文中显示的方法来使用故事板进行工厂模式:
我真正喜欢这种方法,就是你可以使用故事板进行依赖注入,这样我就可以在类之间轻松传递dataApi。
此外,我不再需要使用prepareWithSegue
。相反,我只是初始化视图:
func didSelectApplication(application: Application) {
let factory = StoryboardViewControllerFactory(storyboard: UIStoryboard(name: "Main", bundle: nil))
let applicationController = factory.createApplicationViewController(application, dataApi: dataApi)
navigationController?.pushViewController(applicationController, animated: true)
}
使用prepareForSegue
我无法将应用程序作为参数传递,因此我在类中有一个属性。现在我可以将它传递给方法,该方法已经消除了对类的属性的需要。我个人更喜欢的东西。