UIStoryboard:获取活动故事板的正确方法是什么?

Chr*_*all 50 runtime storyboard ios

我目前正在疯狂地挖掘所有的文档,并没有找到我正在寻找的东西.我怀疑这是真正的哦!回答.

我只需要在主包中找到活动的故事板,并想知道执行此操作的最佳方法.

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

我知道如何通过打开成语来克服它,但我觉得这是一个... kludge.

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

更新:

好.我找到了.

像往常一样,在Stack Overflow(官方Apple文档站点;)上.

这是我确定的代码:

UIStoryboard *st = [UIStoryboard storyboardWithName:[[NSBundle mainBundle].infoDictionary objectForKey:@"UIMainStoryboardFile"] bundle:[NSBundle mainBundle]];
Run Code Online (Sandbox Code Playgroud)

oli*_*esF 39

如果您想获取viewController的活动故事板,则会有一个storyboard属性.这是我解决它的方式,而不是创建一个新实例:

LoginViewController *vc = [navController.storyboard instantiateViewControllerWithIdentifier:@"firstLaunch"];
[navController presentModalViewController:vc animated:YES];
Run Code Online (Sandbox Code Playgroud)

在Swift你会打电话:

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

通过对导航控制器和故事板使用防护,您也可以更加安全.我用as!它来保证你得到一个LoginController.


Chr*_*all 26

好.正如我上面的评论所表明的那样,我找到了(严重措辞问题)的答案:

我希望能够获得主要(非活动)故事板,因为我没有使用每个化身的多个故事板.我正在使用iPhone的1个故事板的标准型号,iPad的1个标准型号.我只想要最简洁的方法来获取故事板,以便我可以使用它来生成视图控制器.

在Stack Overflow上的这篇文章中找到了答案,并使用以下代码实现了它:

UIStoryboard *st = [UIStoryboard storyboardWithName:[[NSBundle mainBundle].infoDictionary objectForKey:@"UIMainStoryboardFile"] bundle:[NSBundle mainBundle]];
Run Code Online (Sandbox Code Playgroud)

  • 调用`[UIStoryboard storyboardWithName:...`创建一个新的故事板实例.这不会让您访问实际加载的相同实例. (11认同)
  • 谢谢.是的,但没关系.我想要一个新实例.已经装好的人正在做其他事情. (2认同)

nbu*_*urk 6

Swift中,您将使用以下语法:

let storyboard = UIStoryboard(name: "Main", bundle: nil) 
Run Code Online (Sandbox Code Playgroud)

请注意,传递nilbundle将使调用自动引用您的包.

如果您在故事板上的视图控制器中并希望直接从那里实例化故事板,则可以执行以下操作:

let storyboard: UIStoryboard? = self.storyboard // call this inside a VC that is on the Storyboard
Run Code Online (Sandbox Code Playgroud)

请注意,在最后一种情况下,self.storyboard将返回一个可选的 Storyboard(Storyboard?),因此如果您想使用它,请将其解包:

if let storyboard = self.storyboard {
  // access storyboard here
}
Run Code Online (Sandbox Code Playgroud)