如何从iOS操场中的文件中实例化Storyboard?

时间:2015-01-27 17:15:33

标签: swift storyboard swift-playground

我们假设您已将Xcode 6项目中的 Main.storyboard 复制到独立游乐场的 Resources 目录中。如何使用 Main.storyboard 文件实例化UIStoryboard?尝试通过nil使用默认设置不起作用:

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

也没有明确使用主捆绑包:

let storyboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle())

即使操场是故事板的Xcode项目的一部分,我也会收到同样的错误:"找不到名为' main'在捆绑NSBundle ..."

看起来捆绑路径是正确的,并且应该能够反序列化故事板文件。

2 个答案:

答案 0 :(得分:13)

我发现了这个:

"您可以将xib文件放入资源中,但操场无法读取或运行它,因为它不是以编译形式。今天,我(最终!)想到使用ibtool将我的MainMenu.xib文件预编译为nib,然后加载它。当您安装Xcode的命令行工具时,ibtool会添加到/ usr / bin。因此,编译nib所需要做的就是发出以下命令:

ibtool --compile MainMenu.nib MainMenu.xib`

将生成的笔尖扔进游乐场的资源文件夹,然后就可以加载了它。"

http://ericasadun.com/2015/03/25/swift-todays-wow-moment-adding-menus-to-playgrounds/

您的故事板将被编译成多个笔尖(每个场景一个)

希望有所帮助

答案 1 :(得分:3)

与@ybakos答案类似,但是要访问带有要加载的故事板的框架(然后Playground和您的应用都可以直接使用相同的故事板):

如果您在为模拟器编译的框架中有一个Storyboard,并且它还嵌入在工作区中的工作项目中,您将能够通过该工作区在同一工作区的操场中加载框架。框架包,如下所示:

let frameworkBundle = Bundle(identifier: "com.kigisoft.KGWeatherMap")
let storyboard = UIStoryboard(name: "WeatherMap", bundle: frameworkBundle)

您可以从此Dropbox链接下载示例项目“StoryboardPlay”:

Playground Example Projects