在 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:
有没有什么方法可以使用 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: