在xcode 8.3中创建一个仅限XIB的Cocoa项目

时间:2017-04-13 17:24:24

标签: cocoa swift3 interface-builder xcode8 xib

我正在尝试在XCode 8.3中创建基于XIB的应用程序,但是已经删除了启动没有Storyboard的项目的选项。以下是我为设置项目所采取的步骤:

  1. 创建一个新的Cocoa应用程序。
  2. 删除Main.Storyboard
  3. 删除ViewController.swift
  4. 向项目添加一个新文件 - 一个Cocoa类 - 的子类 NSWindowController,还创建了检查的XIB文件 - 名为MainWindowController
  5. 在常规项目信息下 - 删除对Main接口的参考
  6. 在app委托中
  7. : add var mainWindowController:NSWindowController? 在applicationDidFinishLaunching中添加

    让mainWindowController = MainWindowController(windowNibname:“MainWindowController”)

    mainWindowController.showWindow(个体)

    self.mainWindowController = mainWindowController

  8. 在信息部分下的项目首选项中添加 主nib文件基本名称MainWindowController

  9. 当我运行它时会显示我的窗口但是,我收到错误:

    无法从(NSApplication)连接(窗口)插座到(NSWindow):缺少setter或实例变量

    如果我添加任何控件并连接它们,我会收到类似的错误,说明它们无法连接。

    菲尔

1 个答案:

答案 0 :(得分:11)

Xcode 9及更高版本的更新

在Xcode 9.0及更高版本(通过至少9.4 beta 1)中,您可以再次将Cocoa App项目模板配置为MainMenu.xib而不是Main.storyboard。只需确保在为新项目选择选项时未选中“使用故事板”选项:

Xcode 9 Cocoa App template project options

ORIGINAL

您的“主界面”设置应指向包含应用程序主菜单栏的故事板或XIB。您可以使用“应用程序”文件模板或“主菜单”文件模板创建包含主菜单栏的XIB。

templates containing a main menu bar

以下是从头开始创建项目的步骤,该项目在一个XIB文件中包含主菜单栏,并且窗口位于单独的XIB文件中:

  1. 使用“Cocoa Application”模板创建一个新项目。

  2. 删除“Main.storyboard”和“ViewController.swift”(或“ViewController.h”和“ViewController.m”)。

  3. 使用“用户界面”部分中的“主菜单”模板创建新文件(文件>新文件...)。将其命名为“MainMenu”(Xcode将自动添加“.xib”扩展名。)

  4. 在目标的常规设置选项卡中,将主界面设置从“Main”更改为“MainMenu.xib”。

  5. 在“MainMenu.xib”中,将NSObject添加到文档大纲中。将其自定义类设置为“AppDelegate”。演示:

    adding an NSObject and setting its class

  6. 在“MainMenu.xib”中,将“文件所有者”的“委托”插座(应该具有“NSApplication”类)连接到“App Delegate”对象。要执行此操作,请按住控制键并从文档大纲中的“文件所有者”拖动到“应用程序代理”。然后从弹出列表中选择“委托”。

  7. 使用“Cocoa Class”模板创建一个新文件。将类名设置为“MainWindowController”并将子类名称设置为“NSWindowController”。确保选中“还为用户界面创建XIB文件”。

  8. 在“MainWindowController.swift”中,为windowNibNameowner添加替换:

    class MainWindowController: NSWindowController {
    
        override var windowNibName: String? { return "MainWindowController" }
        override var owner: AnyObject { return self }
    
  9. 在“AppDelegate.swift”中,添加代码以创建并显示MainWindowController的窗口:

    class AppDelegate: NSObject, NSApplicationDelegate {
    
        func applicationDidFinishLaunching(_ aNotification: Notification) {
            mainWindowController = MainWindowController()
            mainWindowController!.showWindow(nil)
        }
    
        var mainWindowController: MainWindowController?
    
  10. 您现在可以在“MainWindowController.xib”中创建其他对象,并将它们连接到“MainWindowController.swift”中的出口和操作。