我在同一个ios应用程序中有两个故事板。
Storyboard 1是login.storyboard。 Storybaord 2是processing.storyboard。
login.storyboard有以下场景:
1)欢迎
2)登录
processing.storyboard有
1)开始
2)图片
3)描述
4)完成
login.storyboard处理登录,而processing.storyboard创建和对象上传。
我对堆栈的理解如下:
从欢迎导航到登录提供:
1:[welcome]-[login.storyboard]
2:[login]-[login.storyboard]
登录后我使用
推送处理.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]并确保login.storyboard是最新的。
我的知识存在差距,因为我已经在6年左右的时间内重新回到了iphone开发中而且之前没有见过这些。
我曾想过将login.storyboard推入堆栈,但这只会让堆栈继续增长而不是清除它
答案 0 :(得分:1)
您可以pop
回到堆栈中的任意点,例如
[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中的其他视图控制器通过segue连接。从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
,因为那是导航控制器,我们不需要其他导航控制器。相反,在start
下为Storyboard ID
视图控制器Identity inspector
,然后直接实例化start
视图控制器。实例化start
视图控制器后,将其推送到现有导航控制器。如果您不希望用户导航回login
视图控制器,则可能需要隐藏后退按钮。
答案 1 :(得分:1)
使用展开segues。
在[welcome]中添加此方法:
-(IBAction)reset:(UIStoryboardSegue *)segue
{
NSLog(@"Back to Welcome");
}
在Interface Builder中,在[start],[images]和[description]中创建UIButtons
,然后将这些按钮中的每一个链接到绿色"退出"各自viewControllers的按钮,然后在出现的弹出菜单中选择reset:
。
(参见WWDC 2012会话视频"在您的应用中采用故事板"有关展开segues的更多详细信息[从38分钟开始]。)