【问题标题】:How to switch from one storyboard to another storyboard如何从一个故事板切换到另一个故事板
【发布时间】:2017-02-22 14:44:35
【问题描述】:

团队,

我有两个故事板。 一 用于认证 另一个用于我的应用程序仪表板。

对于身份验证故事板 初始化屏幕是 loginScreen。 成功登录后,我正在加载仪表板故事板。 对于仪表板故事板,初始屏幕是 MainViewController。

在这里,我在 DashboardStoryboard 中实现了注销。所以现在我想切换回我的身份验证故事板。

这里回到 loginScreen。 但我认为这不是实施的正确方法。 有什么方法可以做得更好吗?

-(void)logout{
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Authentication" bundle: nil];
    LoginViewScreenController *loginViewScreenController = [storyboard instantiateViewControllerWithIdentifier:@"LoginViewScreenController"];
    [self.navigationController pushViewController: loginViewScreenController animated:NO];
}

非常感谢您的反馈。

【问题讨论】:

  • 你为什么使用两个故事板而不是单独的视图控制器?
  • @Andriko13 我正在使用两个故事板。
  • 你必须查看故事板参考code.tutsplus.com/tutorials/…
  • 如果您只为 iPhone 工作,您不需要使用多个故事板,您可以在登录或注销后导航您的应用程序,或者在任何情况下导航到另一个 VC。
  • @kiran 检查我的回答并让我们知道您的反馈。

标签: ios objective-c iphone storyboard uistoryboard


【解决方案1】:
    let sb = UIStoryboard(name: "Main", bundle: nil)
    let homeVC = sb.instantiateViewController(withIdentifier: "TabBarController")
    let appDelegate = UIApplication.shared.delegate as! AppDelegate
    appDelegate.window?.rootViewController = homeVC

【讨论】:

    【解决方案2】:

    使用segueStoryboard Reference 非常简单。请按照步骤和屏幕截图进行操作。

    第 1 步)

    • 从第一个(主)故事板的对象库中拖放 Storyboard Reference

    第 2 步)

    • 将源 ViewController 中的 segue 添加到 Storyboard reference.

    第 3 步)

    • 选择另一个(第二个)故事板。

    • 参考 ID:destinationViewControler(第二个视图控制器)的 StoryboardID,在 Second.Storyboard 中可用


    -(void)logout
    {
        UIViewController *aVCObj = [[UIApplication sharedApplication]delegate].window.rootViewController;
        if ([aVCObj isKindOfClass:[UINavigationController class]]) {
            UINavigationController *aNavController = (UINavigationController *)aVCObj;
            [aNavController popToRootViewControllerAnimated:YES];
        }
    }
    

    【讨论】:

      【解决方案3】:

      这是一个技巧,方法是在用户登录时使用 NsuserDefaults 设置密钥 true,否则 false 并在启动时导航您的应用程序相应地使用 presentViewController 方法而不动画,因此用户将无法返回上一个 vc。

      看看下面的代码说明上面的句子:

      if ([[[NSUserDefaults standardUserDefaults] valueForKey:@"isloggedIn"] isEqualToString:@"true"]) {
          UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
          UIViewController *vc = [mainStoryboard instantiateViewControllerWithIdentifier:@"loginView"];
          [self presentViewController:vc animated:NO completion:nil];
      
      }else{        // when logout
          UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
          UIViewController *vc = [mainStoryboard instantiateViewControllerWithIdentifier:@"logoutView"];
          [self presentViewController:vc animated:NO completion:nil];
      }
      

      如果你需要在vc出现时应用一些效果,只需在presentViewController方法之前添加这两行代码,请参见:

      [vc setModalPresentationStyle:UIModalPresentationCustom];
      [vc setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
      

      注意:在用户注销时设置false键。

      【讨论】:

        猜你喜欢
        • 2013-09-17
        • 2014-11-13
        • 2017-01-04
        • 2017-05-14
        • 2012-03-23
        • 1970-01-01
        • 1970-01-01
        • 2016-04-07
        • 1970-01-01
        相关资源
        最近更新 更多