![](/img/trans.png)
[英]How to mock storyboard view controller dependencies from tests when using Typhoon?
[英]How to navigate to a controller in a navigation controller using Typhoon when using storyboards
在使用台风时,我遇到了这个问题,但首先是一些背景知识。
viewDidLoad
(欢迎其他建议)。 我尝试过的几件事是:
使用从主页到tabController的序列,但可以看到主页屏幕,并且动画过渡(不需要)。
从情节提要板上实例化选项卡控制器(如下所示),但不会注入依赖项。 我了解这是因为未使用“台风”情节提要。
UIStoryboard * storyboard = [UIStoryboard storyboardWithName:@“ Main”捆绑包:无]; UIViewController * vc1 = [故事板InstantiateViewControllerWithIdentifier:@“ MyAuth”];
我还尝试将Typhoon的工厂用于情节提要。
public dynamic func storyboard() -> AnyObject { return TyphoonDefinition.withClass(TyphoonStoryboard.self){ (definition) in definition.useInitializer("storyboardWithName:factory:bundle:"){ (initializer) in initializer.injectParameterWith("Main") initializer.injectParameterWith(self) initializer.injectParameterWith( NSBundle.mainBundle() ) } definition.scope = TyphoonScope.Singleton; //Let's make this a singleton } } ///Injection for tabbar controller public dynamic func tabBarViewController() -> AnyObject { return TyphoonDefinition.withClass(TabBarViewController.self){ (definition) in } }
在viewDidLoad
我将tabBarViewController(使用注入的程序集)推到导航控制器,但它没有情节提要中指定的选项卡。
func viewDidLoad() {
super.viewDidLoad()
if(userLoggedIn){
self.navigationController?.pushViewController(self.injectedAssembly.storyboard().tabBarController(), animated: false)
}
}
谢谢,
广告1.您可以通过在情节提要板编辑器中选择情节集,切换到情节集的属性检查器并禁用“动画”复选框来禁用在情节提要中创建的情节集上的动画。
广告2。如果包含您发布的代码的UIViewController是在台风注入的UIViewController中实例化的(例如,如果您在主viewcontroller中包含此代码,则可以使用plist集成 ,并且将主viewcontroller设置为情节提要中的初始viewcontroller) ),则可以在UIViewController中访问self.storyboard。 此故事板将是TyphoonStoryboard,因此它将起作用。
广告3.只是因为您向Typhoon提供了有关如何创建MainStoryboards和TabBarViewControllers的说明,但这并不意味着Typhoon知道它应该相互结合。 尝试使用TyphoonDefinition
提供的withFactory:
方法之一,使用正确的故事板实例化UIViewController(对不起,Obj-C而不是Swift)
- (MYViewController *)myViewController {
return [TyphoonDefinition
withFactory:[self storyboard]
selector:@selector(instantiateViewControllerWithIdentifier:)
parameters:^(TyphoonMethod *factoryMethod) {
[factoryMethod injectParameterWith:@"MYViewControllerIdentifier"];
}
configuration:^(TyphoonFactoryDefinition *definition) {
definition.classOrProtocolForAutoInjection = [MYViewController class];
}];
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.