[英]How to open NSSavePanel in FIFinderSync
我正在制作一个可以在选定文件夹中创建文件的 Finder 扩展。我已经将“用户选定文件”的“权限/访问”设置为“读/写”。 但是面板不显示。
override func menu(for menuKind: FIMenuKind) -> NSMenu {
// Produce a menu for the extension.
let menu = NSMenu(title: "")
menu.addItem(withTitle: "Example Menu Item", action: #selector(sampleAction(_:)), keyEquivalent: "")
return menu
}
@IBAction func sampleAction(_ sender: AnyObject?) {
let savePanel = NSSavePanel()
savePanel.canCreateDirectories = true
savePanel.showsTagField = false
savePanel.nameFieldStringValue = "newfile.txt"
savePanel.level = NSWindow.Level(rawValue: Int(CGWindowLevelForKey(.modalPanelWindow)))
savePanel.begin { (result) in
if result.rawValue == NSApplication.ModalResponse.OK.rawValue {
//write file
}
}
}
我设置FIFinderSyncController.default().directoryURLs = [URL(fileURLWithPath: "/")]
我发现一些 Finder 扩展应用程序(例如“Easy New File”)可以打开保存面板。 他们是如何实现的?
添加NSApp.activate(ignoringOtherApps: true)
和DispatchQueue.main.async
。
NSApp.activate(ignoringOtherApps: true)
DispatchQueue.main.async {
let savePanel = NSSavePanel()
savePanel.directoryURL = URL(fileURLWithPath: target.path)
savePanel.canCreateDirectories = true
savePanel.showsTagField = false
savePanel.nameFieldStringValue = "newfile".localized
savePanel.level = NSWindow.Level(rawValue: Int(CGWindowLevelForKey(.modalPanelWindow)))
if (savePanel.runModal() == NSApplication.ModalResponse.OK),let url = savePanel.url{
//wirte file to url
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.