繁体   English   中英

使用情节提要板时如何使用Typhoon导航到导航控制器中的控制器

[英]How to navigate to a controller in a navigation controller using Typhoon when using storyboards

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

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

我尝试过的几件事是:

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

  2. 从情节提要板上实例化选项卡控制器(如下所示),但不会注入依赖项。 我了解这是因为未使用“台风”情节提要。

    UIStoryboard * storyboard = [UIStoryboard storyboardWithName:@“ Main”捆绑包:无]; UIViewController * vc1 = [故事板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 } } 

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM