swift - OS X cocoa swift : Setting up a ViewController programmatically (without Storyboard or nib files)

标签 swift macos cocoa

我目前正在尝试以纯编程方式(没有 Storyboard和 nib 文件)重建现有项目。我知道已经有一些关于此的帖子,但它们并没有真正帮助我。这是一种解决方法:

主.swift

import Cocoa

let delegate = AppDelegate()
NS Application.shared().delegate = delegate

let ret = NSApplicationMain(CommandLine.argc, CommandLine.unsafeArgv)`

AppDelegate.swift

import Cocoa

class AppDelegate: NSObject, NSApplicationDelegate {

   let viewController = ViewController()
   let window = NSWindow(contentRect: NSMakeRect(0, 0, NSScreen.main()!.frame.size.width, NSScreen.main()!.frame.size.height), styleMask: [.titled, .closable, .miniaturizable, .resizable], backing: NSBackingStoreType.buffered, defer: false)

   func applicationDidFinishLaunching(_ aNotification: Notification) {
       viewController.view = NSView(NSMakeRect(0, 0, window.frame.size.width, window.frame.size.height))
       viewController.view.wantsLayer = true
       window.contentView!.addSubview(viewController.view)
       window.makeKeyAndOrderFront(nil)
   }

}

ViewController.swift

import Cocoa

class ViewController: NSViewController {

    override func viewDidAppear() {
        let button = NSButton(frame: NSRect(x: 150, y: 200, width: 300, height: 30))
        button.action = #selector(ViewController.buttonPressed(_:))
        button.target = self
        view.addSubview(button)
    }

    func buttonPressed(_: Any?) {
        print("OK")
    }

}

后来打算用这些按钮在不同的View Controller之间切换,显示不同的View。这是完全正确的方法还是有“更好”的方法来做到这一点?我的目标是拥有一个窗口和不同的 ViewController。谢谢你的帮助

最佳答案

您还需要在按钮上设置目标action 告诉它要调用哪个方法,但如果没有目标,它就无法调用该方法。

您可能还需要更改操作方法以允许 sender 参数:func buttonPressed(_: Any?) {...} 并设置操作到 #selector(ViewController.buttonPressed(_:))

我还刚刚注意到您的 View Controller 仅保存在 applicationDidFinishLaunching 中的局部变量中。它应该是 AppDelegate 的属性,以便有对它的引用,否则它会立即被删除。

关于swift - OS X cocoa swift : Setting up a ViewController programmatically (without Storyboard or nib files),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42094009/

相关文章:

ios - 为什么我无法快速下载所有 json 值?

ios - 在 iOS 应用程序和 mac 之间同步信息的应用程序

iphone - Objective-c:AppDelegate NSString

objective-c - 工具栏中的推送图标

ios - 应用程序角标(Badge)编号更新解析 swift

ios - 在 iOS SceneKit 中更新几何表面的正确方法是什么?

swift - 快速观察多个 NSKeyObservingKeyValueoptions

json - 我可以使用什么程序来创建和编辑 json 文件?

java - 多操作系统下Tomcat webapps文件路径

macos - NSGridView 在 Storyboard中不可用?