我有一个应用程序,用户必须在初始屏幕上输入一些信息,例如登录凭据。所有导航都是使用 Storyboard和 segues 完成的,它会自动将导航栏设置在顶部。
我有两个 Storyboard共享相同的 Controller ,所以我对 segues 使用相同的名称(ipad 和 iphone 版本)。
所以当用户回到应用程序时,我读取了核心数据并知道他已经执行了初始步骤,所以我想“跳过”那些屏幕。
问题: 我只能在 View 可见后执行 segues,否则导航会搞砸。但是这样做时,用户会短暂地看到屏幕并看到动画将屏幕“推”开。我想在导航栏上保留导航历史记录,这就是为什么我想使用 segues 和所有与之相关的逻辑。
所有解决方案都指向以编程方式创建 View 并将它们放在堆栈上,但我想利用 Storyboard。
最佳答案
这是一种方法;
在您的 StoryBoard 中,为第二个 View Controller 分配一个标识符(这是在身份检查器上完成的,设置 Storyboard ID 字段)。在下面的代码中,我将我的命名为 secondVC;
然后在你的第一个 Controller (你想跳过但又回来的那个)的 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 保留在导航树中。
关于ios - Storyboard - 如何在没有动画和显示屏幕的情况下自动执行转场,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23524448/