为什么这个 swift 代码不显示文本字段?

Why this swift code does not show up the textfield?

提问人:KanKonga 提问时间:9/17/2023 最后编辑:KanKonga 更新时间:9/17/2023 访问量:30

问:

代码应该只在窗口中查看“Hello, World!”。窗口随即出现,但文本未显示。为什么?

我可以看到偶数命令文本字段在前面查看。window.makeKeyAndOrderFront(nil)

错误:没有错误或警告

import Cocoa

@main
class AppDelegate: NSObject, NSApplicationDelegate {

    @IBOutlet var window: NSWindow!

    func applicationDidFinishLaunching(_ aNotification: Notification) {
        // Create a new window
        window = NSWindow(contentViewController: TextFieldViewController())
        // Make the window visible
        window.makeKeyAndOrderFront(nil)
    }

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

    func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool {
        return true
    }
}

class TextFieldViewController: NSViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // Create a label
        let label = NSTextField(labelWithString: "Hello, World!")
        label.frame = NSRect(x: 20, y: 100, width: 200, height: 20)
        // Add the label to the view
        view.addSubview(label)
    }
}
swift xcode cocoa nstextfield nsviewcontroller

评论


答:

1赞 Sweeper 9/17/2023 #1

您应该覆盖 ,并在此处添加标签loadView

override func loadView() {
    let view = NSView(frame: NSMakeRect(0,0,400,400))
    self.view = view

    let label = NSTextField(labelWithString: "Hello, World!")
    label.frame = NSRect(x: 20, y: 100, width: 200, height: 20)
    
    view.addSubview(label)
}

这是因为 的默认实现会查找 nib 文件,而您可能没有也不想使用该文件。loadView

NSViewController 的文档说:

但在 macOS 10.10 及更高版本中,该方法会自动查找与视图控制器同名的 nib 文件。loadView()

另请参阅 loadView 的文档:

例如,如果您有一个名为 MyViewController 的视图控制器子类和同名的 nib 文件,则可以使用方便的初始化模式。[[MyViewController alloc] init]