在 Swift 中以编程方式创建 NSTextField
Posted
技术标签:
【中文标题】在 Swift 中以编程方式创建 NSTextField【英文标题】:Creating NSTextFields programmatically in Swift 【发布时间】:2015-01-10 03:03:33 【问题描述】:有什么方法可以使用 Swift 完全以编程方式创建 NSTextFields?我正在创建一个我不想连接到情节提要的 mac 应用程序,但除了制作 IBOutlet 之外,我想不出任何创建 NSTextField 的方法。顺便说一句,我是编程新手,很抱歉我缺乏技术语言。
谢谢!
编辑:
这是我目前尝试过的代码:
执行此操作时,我收到错误消息“致命错误:在展开可选值时意外发现 nil。”无论我是测试 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)
【问题讨论】:
你必须使用 SKLabel 和 SpriteKit 【参考方案1】:您可以轻松完成。只需将您的视图连接到插座,然后您就可以这样做:
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:
【讨论】:
我可能应该澄清一下我正在使用 SpriteKit 制作游戏。我有一个继承自 SKScene 的类,我试图在其中显示 NSTextField。由于它继承自SKScene,它已经有一个视图属性,但是当我做view.addSubview(myTextField)
时,它不起作用。当我尝试定义一个名为“view”的 IBOutlet 时,我也会遇到错误。在我的课堂上有没有办法做到这一点?谢谢!
SKView 继承自 NSView。 SKScene 的 View 属性是 SKView 我相信以上是关于在 Swift 中以编程方式创建 NSTextField的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Swift 中以编程方式创建 SplitViewController?
在 Swift 中以编程方式创建垂直 UIScrollView
使用 Cocoa 在 Swift 4.0 中以编程方式创建复选框的标准方法是啥?
如何在 ios swift 中以编程方式创建自动布局等宽约束?