使用 Cocoa 快速创建一个窗口

问题描述 投票:0回答:1

我想创建一个类,我可以用它在 Cocoa Swift 中创建一个窗口。我希望能够调用 styleMasking。另外,我没有使用 XCode,因为我想独立于 XCode 来了解 Swift 开发。 这是我的代码:

import Cocoa

class customWindow {
    var size: [Double]
    var position: [Double]
    let window: NSWindow!

    init(size: [Double], position: [Double], title: String, styleMasking: NSWindow.StyleMask) {
        self.size = size
        self.position = position

        window = NSWindow(contentRect: NSRect(x: 0, y: 0, width: self.size[0], height: self.size[1]), styleMask: styleMasking, backing: .buffered, defer: true)
        window.title = title

        window.makeKeyAndOrderFront(nil)
    }

    convenience init() {
        self.init(size: [100, 100], position: [0, 0], title: "Untitled", styleMasking: [.closable, .titled, .resizable, .miniaturizable])
    }
}

var myWindow: customWindow = customWindow()

当我运行代码时,没有弹出错误,但不显示窗口。代码也运行,但它永远不会完成

我尝试过使用窗口初始化。我改变了位置来测试它是否只是在屏幕外创建的。我玩过宽度和高度。

我还删除了

window.makeKeyAndOrderFront(nil)
并将
defer
更改为
true
false
,代码完成而不是继续运行,但窗口没有再次出现。

我还尝试使用

init
而不是
convenience init
来调用 customWindow 来初始化它,但具有所有相同的属性,并且它运行并完成,但没有显示窗口。这让我相信这是类调用的问题,但我可能是错的。

swift class cocoa initialization window
1个回答
0
投票

您需要配置一个

NSApp
run()
它。

import Cocoa

class CustomWindow {
    let size: [Double]     // These are never changed... should they be 'let'?
    let position: [Double] // These are never changed... should they be 'let'?
    let window: NSWindow! // A "Window" contains a window... that's a little odd.

    init(size: [Double], position: [Double], title: String, styleMasking: NSWindow.StyleMask) {
        self.size = size
        self.position = position

        window = NSWindow(contentRect: NSRect(x: 0, y: 0, width: self.size[0], height: self.size[1]), styleMask: styleMasking, backing: .buffered, defer: true)
        window.title = title

        window.makeKeyAndOrderFront(nil)
    }

    convenience init() {
        self.init(size: [100, 100], position: [0, 0], title: "Untitled", styleMasking: [.closable, .titled, .resizable, .miniaturizable])
    }
}

let myWindow: CustomWindow = CustomWindow()

let app = NSApplication.shared
app.setActivationPolicy(.regular)
app.run()
© www.soinside.com 2019 - 2024. All rights reserved.