Ios 故事板-如何在没有动画和显示屏幕的情况下自动执行片段

Ios 故事板-如何在没有动画和显示屏幕的情况下自动执行片段,ios,objective-c,ios7,segue,Ios,Objective C,Ios7,Segue,我有一个应用程序,用户必须在初始屏幕上输入一些信息,例如登录凭据。所有的导航都是使用故事板和segues完成的,它会自动在顶部设置导航栏 我有两个故事板共享相同的控制器,所以我对segues(ipad和iphone版本)使用相同的名称 因此,当用户返回应用程序时,我读取了核心数据,知道他已经执行了初始步骤,所以我想“跳过”这些屏幕 问题: 我只能在视图可见后执行segues,否则导航会出错。但当这样做时,用户会短暂地看到屏幕,并看到动画将屏幕“推”开。我想在导航栏上保留导航历史记录,这就是为什么

我有一个应用程序,用户必须在初始屏幕上输入一些信息,例如登录凭据。所有的导航都是使用故事板和segues完成的,它会自动在顶部设置导航栏

我有两个故事板共享相同的控制器,所以我对segues(ipad和iphone版本)使用相同的名称

因此,当用户返回应用程序时,我读取了核心数据,知道他已经执行了初始步骤,所以我想“跳过”这些屏幕

问题: 我只能在视图可见后执行segues,否则导航会出错。但当这样做时,用户会短暂地看到屏幕,并看到动画将屏幕“推”开。我想在导航栏上保留导航历史记录,这就是为什么我想使用segues和所有与之相关的逻辑


所有的解决方案都指向以编程方式创建视图并将它们放在堆栈上,但我想利用故事板

在情节提要中,为第二个视图控制器指定一个标识符(这在identity inspector上完成,设置情节提要ID字段)。在下面的代码中,我将我的命名为secondVC

然后在viewDidLoad中为您的第一个控制器(您希望跳过但返回的控制器)执行类似的操作

- (void)viewDidLoad{
   [super viewDidLoad];
   /// validate  viewController one being displayed
   if(dontDisplayFirstController){

      UIStoryboard *storyBoard = self.storyboard;
      UIViewController *targetViewController = [storyBoard instantiateViewControllerWithIdentifier:@"secondVC"];
      UINavigationController *navController = self.navigationController;


      if (navController) {
        [navController pushViewController:targetViewController animated:NO];
      }
   }
}

这将有效地推送到第二个viewController,同时仍保持导航树中的viewController 1

尝试使用PerformsgueWithIdentifier,根据身份验证状态指定要“链接”到的序列。至于糟糕的导航,我不知道如果你已经正确设置了故事板为什么会这样。我们已经在使用identifier执行performsgues,问题是它只能在viewdide事件上执行,而不能像viewdideload那样提前执行。这意味着用户已经在查看屏幕,并且会注意到转换。如果您尝试在viewDidLoad上执行此操作,导航将被拧紧(如果您检查控制台,则会出现一些警告)。我不确定我是否理解为什么只能在出现viewDidLoad时执行此步骤。假设您有一个登录控制器,您执行登录,并在该点上执行所需的序列。这将作为身份验证的一部分发生,而不是加载视图。我想我对你写的“当用户返回应用程序时”,感到困惑,你能解释更多或者显示代码吗?好的,让我试着简化这个问题。我有两个屏幕,当用户按下按钮时,会从第一个屏幕导航到第二个屏幕。执行performsguewithidentifier,第二个屏幕显示为从右侧滑入(推)。在某些情况下,我想跳过第一个屏幕,直接转到第二个屏幕,但如果用户愿意,他可以按后退按钮,返回第一个屏幕。因此,我要做的是在视图上显示PerformsgueWithIdentifier。这会导致导航发生,但屏幕转换是可见的。如果我尝试在viewDidLoad上执行此操作,这将是一个完美的时机,它仍会导航,但第二个屏幕上的“后退”按钮无法工作,因为我在此之前已导航过。我与OP有相同的问题;除了构造正确的导航堆栈外,我还希望在最顶层的视图控制器上实际执行prepareforsgue:方法(它设置了推送VC所需的一些属性)。我知道我可以在实例化新VC后“手动”执行此操作,但我希望避免从原始prepareforsgue复制逻辑。