Ios 情节提要导航-从堆栈中推送和删除

Ios 情节提要导航-从堆栈中推送和删除,ios,storyboard,Ios,Storyboard,我在同一个ios应用程序中有两个故事板 故事板1是login.Storyboard。 Storybaord 2是processing.storyboard login.storyboard具有以下场景: 1) 欢迎光临 2) 登录 正在处理。情节提要 1) 开始 2) 图像 3) 描述 4) 完成 login.storyboard在处理时处理登录。storyboard创建和上载对象 我对堆栈的理解如下: 从欢迎浏览到登录: 1:[welcome]-[login.storyboard] 2:[l

我在同一个ios应用程序中有两个故事板

故事板1是login.Storyboard。 Storybaord 2是processing.storyboard

login.storyboard具有以下场景:

1) 欢迎光临

2) 登录

正在处理。情节提要

1) 开始

2) 图像

3) 描述

4) 完成

login.storyboard在处理时处理登录。storyboard创建和上载对象

我对堆栈的理解如下:

从欢迎浏览到登录:

1:[welcome]-[login.storyboard]

2:[login]-[login.storyboard]
登录后,我使用

- (void) pushStory: (NSString *) story {

UIStoryboard *settingsStoryboard = [UIStoryboard storyboardWithName:story bundle:nil];
UIViewController *initialSettingsVC = [settingsStoryboard instantiateInitialViewController];
initialSettingsVC.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[self presentViewController:initialSettingsVC animated:YES completion:nil];
}
堆栈现在应该是:

1:[welcome]
2:[login]
3:[start]
在我决定单击注销(每个页面都有)之前,我可能会在工作流中找到描述,此时我的堆栈将是

1:[welcome]-[login.storyboard]

2:[login]-[login.storyboard]

3:[start]-[processing.storyboard]

4:[images]-[processing.storyboard]

5:[description]-[processing.storyboard]
注销会让我回到[welcome],我的问题是关于故事板,我如何将堆栈清除回[welcome],并确保login.storyboard是最新的

我在这方面的知识有一个缺口,因为我在6年左右的时间后刚刚回到iphone开发中,以前从未见过这些


我曾想过将login.storyboard推到堆栈上,但这只会使堆栈继续增长,而不是清除它。例如,您可以
弹出
返回堆栈中的任意点

    [self.navigationController popToRootViewControllerAnimated:YES];         // all the way back to the first view controller
    [self.navigationController popToViewController:self.navigationController.viewControllers[1] animated:YES];  // back to the second view controller 
    [self.navigationController popViewControllerAnimated:YES];               // back to the previous view controller
这个答案假设故事板1具有

  • 导航控制器
  • 欢迎查看控制器
  • 登录视图控制器
故事板2已经完成了

  • 导航控制器
  • 启动视图控制器
  • 图像视图控制器
  • 描述视图控制器
  • 完成视图控制器
请注意,序列图像板2中的导航控制器从未实际实例化,但需要这样做,以便序列图像板2中的其他视图控制器可以通过分段连接。从
login view controller
导航到
start view controller
时,代码应与此类似

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"SecondStoryboard" bundle:nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"ControllerC"];
[self.navigationController pushViewController:vc animated:YES];
请注意,这不会实例化
initialViewController
,因为这是导航控制器,我们不需要另一个导航控制器。相反,在
标识检查器
下为
启动
视图控制器提供一个
情节提要ID
,然后直接实例化
启动
视图控制器。实例化
启动
视图控制器后,将其推到现有导航控制器上。如果不希望用户导航回
登录
视图控制器,则可能需要隐藏“后退”按钮。

使用“展开”分段

在[welcome]中添加此方法:

-(IBAction)reset:(UIStoryboardSegue *)segue
{
    NSLog(@"Back to Welcome");
}
在Interface Builder中,在[start]、[Image]和[description]中创建
UIButtons
,然后将这些按钮链接到各自视图控制器的绿色“Exit”按钮,并在出现的弹出菜单中选择
reset:

(请参阅WWDC 2012年课程视频“在应用程序中采用故事板”,了解更多关于“展开”环节的详细信息[开始时间为38分钟]。)