在 Swift 中以编程方式创建 NSTextFields

Creating NSTextFields programmatically in Swift

有没有什么方法可以使用 Swift 完全以编程方式创建 NSTextFields?我正在创建一个 mac 应用程序,我不想连接到故事板,但除了制作 IBOutlet 之外,我想不出任何创建 NSTextFields 的方法。顺便说一句,我是编程新手,很抱歉我缺乏技术语言。

谢谢!

编辑:

这是我到目前为止尝试过的代码:

当我这样做时,我收到错误消息 "fatal error: unexpectedly found nil while unwrapping an Optional value." 无论我测试 SKView 还是 NSView,都会弹出相同的错误消息。如果我尝试将 IBOutlet 定义为 "view" 而不是 "test",它会告诉我无法覆盖存储的 属性 "view".

import Foundation
import Cocoa
import SpriteKit

class SettingsScene: SKScene {

    @IBOutlet weak var window: NSWindow!
    @IBOutlet weak var test: SKView!

    var ballSpeedText = NSTextField(frame: NSMakeRect(20,20,200,40))

    override func didMoveToView(view: SKView) {
        ballSpeedText.textColor = NSColor.redColor()
        ballSpeedText.stringValue = "Test"
        test.addSubview(ballSpeedText)
    }

如果我在不创建任何 IBOutlets 的情况下尝试这样做,仅使用视图,我不会收到任何错误,但文本字段不会显示:

import Foundation
import Cocoa
import SpriteKit

class SettingsScene: SKScene {

    var ballSpeedText = NSTextField(frame: NSMakeRect(20,20,200,40))

    override func didMoveToView(view: SKView) {
        ballSpeedText.textColor = NSColor.redColor()
        ballSpeedText.stringValue = "Test"
        view.addSubview(ballSpeedText)
    }

你可以轻松做到。只需将您的视图连接到插座,然后您就可以这样做:

import Cocoa

class AppDelegate: NSObject, NSApplicationDelegate {

    private var window: NSWindow?

    let textField = NSTextField(frame: .init(x: 20, y: 20, width: 200, height: 40))

    func applicationDidFinishLaunching(_ aNotification: Notification) {
        window = NSWindow(contentRect: NSScreen.main?.frame ?? .zero,
        styleMask: [.miniaturizable, .closable, .resizable, .titled],
        backing: .buffered,
        defer: false)
        window?.title = "My App"
        window?.makeKeyAndOrderFront(nil)
        
        textField.textColor = .red
        textField.stringValue = "Hello World !!!"
        window?.contentView?.addSubview(textField)
    }

    func applicationWillTerminate(_ aNotification: Notification) {
        // Insert code here to tear down your application
    }
}

main.swift 文件添加到您的项目:

import Cocoa

let delegate = AppDelegate()
NSApplication.shared.delegate = delegate
_ = NSApplicationMain(CommandLine.argc, CommandLine.unsafeArgv)

然后在您的目标部署信息中,从主界面中删除 main.storyboard: