UIStoryboard:什么是正确的方式来获得积极的故事板?

我目前正在疯狂地挖掘所有的文档,还没有find我正在寻找的东西。 我怀疑这是一个真正的噢! 回答。

我只需要在主包中find活动的故事板,并想知道最好的方法来做到这一点。

这样我就可以使用[UIStoryboard storyboardWithName:@"XXX" bundle:mainBundle]来提取正在运行的故事板。

我知道如何通过切换成语来克服它,但我觉得这是一个… kludge。

什么是这样做的正确方法?

更新:

好。 我find了。

像往常一样, 在堆栈溢出 (苹果官方文档网站;)。

这里是我解决的代码:

 UIStoryboard *st = [UIStoryboard storyboardWithName:[[NSBundle mainBundle].infoDictionary objectForKey:@"UIMainStoryboardFile"] bundle:[NSBundle mainBundle]]; 

如果你想得到一个viewController的活动故事板,有一个故事板属性。 这就是我解决它的方法,而不是创build一个新的实例:

  LoginViewController *vc = [navController.storyboard instantiateViewControllerWithIdentifier:@"firstLaunch"]; [navController presentModalViewController:vc animated:YES]; 

在Swift中你会打电话给:

  let loginViewController = navigationController?.storyboard?.instantiateViewController(withIdentifier: "firstLaunch") as! LoginViewController navigationController?.present(loginViewController, animated: true, completion: nil) 

通过对导航控制器和故事板使用警戒,您也可以更安全。 我用过as! 以保证你得到一个LoginController。

好。 正如我上面的评论所表明的那样,我find了这个(严重的问题)的答案:

我希望能够获得主要 (不活跃 )的故事板,因为我不是每个化身使用多个故事板。 我正在使用iPhone的1个故事板的标准模型,和iPad的1个。 我只是想要最简洁的方式来获取故事板,以便我可以使用它来生成视图控制器。

我在Stack Overflow的这篇文章中find了答案,并用下面的代码实现了它:

 UIStoryboard *st = [UIStoryboard storyboardWithName:[[NSBundle mainBundle].infoDictionary objectForKey:@"UIMainStoryboardFile"] bundle:[NSBundle mainBundle]]; 

Swift中 ,你可以使用下面的语法:

 let storyboard = UIStoryboard(name: "Main", bundle: nil) 

请注意,将nil传递给bundle会使呼叫自动引用您的包。

如果您位于Storyboard上的视图控制器中 ,并想直接从此处实例化Storyboard,则可以执行以下操作:

 let storyboard: UIStoryboard? = self.storyboard // call this inside a VC that is on the Storyboard 

请注意,在最后的情况下, self.storyboard将返回一个可选的 Storyboard( Storyboard? ),所以如果你想使用它打开它像这样:

 if let storyboard = self.storyboard { // access storyboard here } 

我刚刚复制粘贴上面的代码forms更新的问题,以便大家可以看到它作为一个答案。

 UIStoryboard *st = [UIStoryboard storyboardWithName:[[NSBundle mainBundle].infoDictionary objectForKey:@"UIMainStoryboardFile"] bundle:[NSBundle mainBundle]];