一尘不染

使用Swift的没有Storyboard或Xib文件的OSX应用程序

swift

不幸的是,我在Internet上找不到任何有用的东西-
我想知道,在不使用Swift中的故事板或XIB文件的情况下,初始化应用程序实际上必须输入什么代码。我知道我必须有一个.swift名为的文件main。但是我不知道在那写什么(比如我需要autoreleasepool之类的东西?)。例如,我要NSMenu如何初始化和如何将a添加NSViewController到活动窗口(iOS的类似方法.rootViewController无济于事)。谢谢你的帮助
;)

编辑:实际上我不想@NSApplicationMain在前面使用AppDelegate。我宁愿知道那里到底发生了什么,然后自己做。


阅读 263

收藏
2020-07-07

共1个答案

一尘不染

如果您不想拥有@NSApplicationMain属性,请执行以下操作:

  1. 有一个文件main.swift
  2. 添加以下顶级代码:
        import Cocoa

    let delegate = AppDelegate() //alloc main app's delegate class
    NSApplication.sharedApplication().delegate = delegate //set as app's delegate

    // Old versions:
    // NSApplicationMain(C_ARGC, C_ARGV)
    NSApplicationMain(Process.argc, Process.unsafeArgv);  //start of run loop

其余的应该在您的应用程序委托中。例如:

    import Cocoa

    class AppDelegate: NSObject, NSApplicationDelegate {
        var newWindow: NSWindow?
        var controller: ViewController?

        func applicationDidFinishLaunching(aNotification: NSNotification) {
            newWindow = NSWindow(contentRect: NSMakeRect(10, 10, 300, 300), styleMask: .resizable, backing: .buffered, defer: false)

            controller = ViewController()
            let content = newWindow!.contentView! as NSView
            let view = controller!.view
            content.addSubview(view)

            newWindow!.makeKeyAndOrderFront(nil)
        }
    }

然后你有一个viewController

    import Cocoa

    class ViewController : NSViewController {
        override func loadView() {
            let view = NSView(frame: NSMakeRect(0,0,100,100))
            view.wantsLayer = true
            view.layer?.borderWidth = 2
            view.layer?.borderColor = NSColor.red.cgColor
            self.view = view
        }
    }
2020-07-07