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

时间:2012-03-24 16:59:01

标签: ios runtime storyboard

我目前正在疯狂地挖掘所有文档,并且还没有完全找到我正在寻找的东西。我怀疑这是真正的哦!答案。

我只需要在主要包中找到活动的故事板,并想知道最好的方法。

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

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

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

更新

行。我找到了。

像往常一样,on Stack Overflow(官方Apple文档网站;)。

以下是我确定的代码:

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

4 个答案:

答案 0 :(得分:39)

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

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。

答案 1 :(得分:26)

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

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

我在this post on Stack Overflow找到了答案,并使用以下代码实现了它:

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

答案 2 :(得分:6)

Swift 中,您使用以下语法:

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

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

如果您在故事板上拥有视图控制器,并希望直接从那里实例化故事板,您可以这样做:

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

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

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

答案 3 :(得分:1)

我刚刚复制粘贴了更新问题上方的代码表单,以便每个人都可以将其视为答案。

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