【问题标题】:How to navigate to a controller in a navigation controller using Typhoon when using storyboards使用情节提要时如何使用 Typhoon 导航到导航控制器中的控制器
【发布时间】:2016-01-01 15:19:30
【问题描述】:

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

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

我尝试过的几件事是:

  1. 使用从 home 到 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
    
        }
    
    }
    

viewDidLoad 上,我将 tabBarViewController(使用注入的程序集)推送到导航控制器,但它没有情节提要上指定的选项卡。

func viewDidLoad() {
    super.viewDidLoad()

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

谢谢,

【问题讨论】:

    标签: ios objective-c swift typhoon


    【解决方案1】:

    ad 1. 您可以通过在情节提要编辑器中选择转场,切换到转场的属性检查器并禁用“动画”复选框来禁用您在情节提要中创建的转场的动画。

    ad 2. 如果包含您发布的代码的 UIViewController 是在注入 Typhoon 的 UIViewController 中实例化的(例如,如果您在主视图控制器中有此代码,则使用 plist integration,并且主视图控制器设置为初始viewcontroller 在您的故事板中),然后您可以访问 UIViewController 中的 self.storyboard。这个故事板将是一个 TyphoonStoryboard,因此它可以工作。

    ad 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];
                }];
    }
    

    【讨论】:

      猜你喜欢
      • 2012-11-17
      • 2014-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-04
      • 1970-01-01
      • 2020-06-09
      • 1970-01-01
      相关资源
      最近更新 更多