在使用Typhoon时,我遇到了这个问题,但首先是一些背景。
viewDidLoad
中完成(欢迎其他建议)。我尝试过的一些事情是:
使用从主页到tabController的segue,但可以看到主屏幕,并且过渡是动画的(不要这样)。
从故事板中实例化选项卡控制器(如下所示),但不会注入依赖项。我知道这是因为没有使用Typhoon故事板。
UIStoryboard * storyboard = [UIStoryboard storyboardWithName:@“Main”bundle:nil]; UIViewController * vc1 = [storyboard 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)
}
}
谢谢,
答案 0 :(得分:1)
ad 1.您可以通过在情节提要编辑器中选择segue,切换到segue的属性检查器并禁用" Animates"来禁用在故事板中创建的segue上的动画。复选框。
ad 2.如果包含您发布的代码的UIViewController在Typhoon注入的UIViewController中实例化(例如,如果您在home viewcontroller中有此代码,则使用plist integration,并且home viewcontroller设置为你的故事板中的初始viewcontroller),然后你可以访问UIViewController中的self.storyboard。这个故事板将是TyphoonStoryboard,因此它将起作用。
ad 3.仅仅因为您提供了有关如何创建MainStoryboards和TabBarViewControllers的Typhoon说明,它并不意味着Typhoon知道它应该将一个与另一个结合起来。尝试使用withFactory:
提供的TyphoonDefinition
方法之一,使用正确的故事板实例化你的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];
}];
}