Swift 如何将NSPanel定位在应用程序窗口的中心

Swift 如何将NSPanel定位在应用程序窗口的中心,swift,macos,appkit,Swift,Macos,Appkit,我对Macos开发非常陌生,网上几乎没有任何可用信息,但我似乎不知道如何将我的NSpanel定位在应用程序窗口的顶部中心。它在我整个屏幕的中央打开 let dialog = NSOpenPanel() dialog.title = "Choose a file!" dialog.showsResizeIndicator = true; dialog.showsHiddenFiles = false;

我对Macos开发非常陌生,网上几乎没有任何可用信息,但我似乎不知道如何将我的NSpanel定位在应用程序窗口的顶部中心。它在我整个屏幕的中央打开

let dialog = NSOpenPanel()
            dialog.title = "Choose a file!"
            dialog.showsResizeIndicator = true;
            dialog.showsHiddenFiles = false;
            dialog.allowsMultipleSelection = false;
            dialog.canChooseDirectories = false;
            dialog.allowedFileTypes = ["py"];
            dialog.isFloatingPanel = false;

这是我的当前代码

您可以执行以下操作

let dialog = NSOpenPanel()
    dialog.title = "Choose a file!"
    dialog.showsResizeIndicator = true;
    dialog.showsHiddenFiles = false;
    dialog.allowsMultipleSelection = false;
    dialog.canChooseDirectories = false;
    dialog.allowedFileTypes = ["py"];

// here `window` is your document or main window (eg: `NSApp.mainWindow!`, etc.)
dialog.beginSheetModal(for: window) { result in
    if result == .OK {
        // do read a file
    }
}

您可以执行以下操作

let dialog = NSOpenPanel()
    dialog.title = "Choose a file!"
    dialog.showsResizeIndicator = true;
    dialog.showsHiddenFiles = false;
    dialog.allowsMultipleSelection = false;
    dialog.canChooseDirectories = false;
    dialog.allowedFileTypes = ["py"];

// here `window` is your document or main window (eg: `NSApp.mainWindow!`, etc.)
dialog.beginSheetModal(for: window) { result in
    if result == .OK {
        // do read a file
    }
}

如果将NSOpenPanel子类化并重写“中心”方法,则可以将面板放置在特定坐标上

将te面板放置在屏幕左上方:

class MyOpenPanel: NSOpenPanel {    
override func center() {
    let rect = self.screen?.frame
    self.setFrameOrigin(NSPoint(x: 0, y: rect!.height - self.frame.height))
}

}

如果将NSOpenPanel子类化并覆盖“中心”方法,则可以将面板放置在特定坐标上

将te面板放置在屏幕左上方:

class MyOpenPanel: NSOpenPanel {    
override func center() {
    let rect = self.screen?.frame
    self.setFrameOrigin(NSPoint(x: 0, y: rect!.height - self.frame.height))
}
}