OSX / macOS - 如何将 xib 迁移到情节提要

Posted

技术标签:

【中文标题】OSX / macOS - 如何将 xib 迁移到情节提要【英文标题】:OSX / macOS - how to migrate a xib to the storyboard 【发布时间】:2016-05-11 01:56:53 【问题描述】:

我有一个带有 mainmenu.xib 的应用程序,出于各种原因,我想将它迁移到情节提要。有没有办法在不创建新项目的情况下做到这一点?

【问题讨论】:

【参考方案1】:

这是怎么做的:

    使用情节提要创建一个新项目。我们只是打算用它来复制一个在对象库中找不到的小东西。

    返回现有项目,在现有项目中添加一个新的故事板 ui 文件(例如 Main.storyboard)。与开始新项目时不同,情节提要文件将完全空白。

    从新项目的情节提要中,复制“应用场景”并将其粘贴到现有项目的情节提要中。这是一种解决方法,因为无法从对象库中获取应用程序场景。完成此操作后,通过查看 Connections 检查器(右侧面板)检查 App Delegate 对象的“delegate”属性是否具有“Application”的引用出口。如果不是,请将它们链接在一起。

    在对象库(右侧面板>下面的对象库)中,添加窗口控制器。这将添加窗口控制器场景和视图控制器场景。

    如果您使用自定义类,请为窗口控制器/窗口/视图控制器/视图引用适当的类。

    打开您之前的 xib 文件并复制到您之前使用的任何视图中。

    在现有项目的 xcproj 文件中,转到构建目标的信息部分,并将 xib 字典键/值替换为“NSMainStoryboardFile”作为键和“Main”(或任何您的故事板文件称为 sans fileextension) 的值。

补充说明:

如果您使用自定义视图控制器并将它们迁移到情节提要,请确保它们允许通过 initWithCoder 进行初始化。

如果你需要从 appdelegate 获取 viewcontroller,你不能通过 NSStoryboard 的 instantiateWithName 方法来做,这会创建一个新的实例。而是执行以下操作:

NSApplication *application = [NSApplication sharedApplication];

NSWindow *window = application.windows[0];

self.myCustomViewController = (MyCustomViewController *)window.contentViewController;

【讨论】:

我现在正在用 Xcode12 尝试这个,它只在某种程度上有效。问题是连接到/来自 App Delegate 的插座似乎不起作用。因此,在我的存储板中,我有一个 NSOutlineView,但我无法将它连接到 App Delegate 的 IBOutlet,我也无法将 NSOutlineView 的委托或数据源连接回 AppDelegate。类设置正确。不确定这是否也是您的经历。

以上是关于OSX / macOS - 如何将 xib 迁移到情节提要的主要内容,如果未能解决你的问题,请参考以下文章

将 osx 更新到 macOS Sierra 后 MAMP PRO 4+ 消失主机 /etc/hosts

将核心数据模型从 OSX 迁移到 IOS

从苹果官网下载的Mac OSX系统可以移植到普通的电脑上吗?

如何在 MacOS 中正确显示 xib 文件的模态视图?

无法将 xib 文件添加到目标成员资格

从过期的 MAMP Pro 试用版迁移到 MAMP 的免费版 (OSX) 后显示 Wordpress 安装页面