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]];