如何在使用故事板时使用Typhoon导航到导航控制器中的控制器

时间:2015-10-05 02:51:50

标签: ios objective-c swift typhoon

在使用Typhoon时,我遇到了这个问题,但首先是一些背景。

  • 我正在使用故事板。
  • 故事板在主屏幕中开始,然后流向登录,然后到主屏幕(UITabBarController)。我使用导航控制器作为根控制器。
  • 如果用户已登录,我想显示主屏幕而不显示主屏幕或登录屏幕。这可以在主屏幕viewDidLoad中完成(欢迎其他建议)。

我尝试过的一些事情是:

  1. 使用从主页到tabController的segue,但可以看到主屏幕,并且过渡是动画的(不要这样)。

  2. 从故事板中实例化选项卡控制器(如下所示),但不会注入依赖项。我知道这是因为没有使用Typhoon故事板。

    UIStoryboard * storyboard = [UIStoryboard storyboardWithName:@“Main”bundle:nil]; UIViewController * vc1 = [storyboard instantiateViewControllerWithIdentifier:@“MyAuth”];

  3. 我也尝试过将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
    
        }
    
    }
    
  4. viewDidLoad上我将tabBarViewController(使用注入的程序集)推送到导航控制器,但它没有故事板上指定的选项卡。

    func viewDidLoad() {
        super.viewDidLoad()
    
        if(userLoggedIn){
            self.navigationController?.pushViewController(self.injectedAssembly.storyboard().tabBarController(), animated: false)
        }
    }
    

    谢谢,

1 个答案:

答案 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];
            }];
}