NSSavePannel - 如何限制用户只保存一组目录?
NSSavePannel - how to restrict user to only save one one set directory?
用户必须保存文件,但我只希望他们将文件保存在一个文件夹中。如何做到这一点?
我已经尝试实施委托并在目录不同时强行设置目录。这是行不通的。当保存面板打开时,用户仍然可以 select 其他文件夹
extension Project: NSOpenSavePanelDelegate {
func panel(_ sender: Any, didChangeToDirectoryURL url: URL?) {
if url != testsFolder {
(sender as! NSSavePanel).directoryURL = testsFolder
}
}
func panel(_ sender: Any, validate url: URL) throws {
if url.deletingLastPathComponent() != testsFolder {
(sender as! NSSavePanel).directoryURL = testsFolder
throw ProjectError.scriptInitiliation
}
}
}
The thing is, the folder is already fix fixed within the app.
现在是时候从用户那里获得访问此文件夹的权限了。使用打开(不保存)对话框让用户确认文件夹的选择。将此视为 "confirm access dialog",您可以:
- 使用
prompt
将 "Open" 按钮的标签更改为其他内容
- 设置
title
和 message
使对话框明确为确认对话框
- 使用
directoryURL
将初始文件夹设置为您要确认的文件夹的父文件夹(注意:对 directoryURL
的任何更改在 对话框打开后被忽略,因此您无法使用委托将对话框锁定到该文件夹 didChangeToDirectoryURL
– 在早期的沙盒中您可以,但 Apple 现在已经停止了)
- 设置
delegate
并使用其 shouldEnable
和 validate
回调来确保只能选择您希望确认的文件夹或取消对话框。
- 将
canCreateDirectories
和canChooseFiles
设置为false
,将canChooseDirectories
设置为true
一旦用户确认了文件夹访问权限,就在您应用的首选项中保存一个安全范围的书签。您的应用现在可以随时重新获得对该文件夹的访问权限。使用该权限,您可以在该文件夹中创建和打开文件和文件夹,而无需再次使用 NSOpenPanel
或 NSSavePanel
。
从这一点开始限制用户保存在该文件夹中,建立您自己的对话框以仅询问文件名,省略路径部分,然后绕过 NSSavePanel
– 您可以模拟标准对话框或设计您的从头开始拥有。
HTH
用户必须保存文件,但我只希望他们将文件保存在一个文件夹中。如何做到这一点?
我已经尝试实施委托并在目录不同时强行设置目录。这是行不通的。当保存面板打开时,用户仍然可以 select 其他文件夹
extension Project: NSOpenSavePanelDelegate {
func panel(_ sender: Any, didChangeToDirectoryURL url: URL?) {
if url != testsFolder {
(sender as! NSSavePanel).directoryURL = testsFolder
}
}
func panel(_ sender: Any, validate url: URL) throws {
if url.deletingLastPathComponent() != testsFolder {
(sender as! NSSavePanel).directoryURL = testsFolder
throw ProjectError.scriptInitiliation
}
}
}
The thing is, the folder is already fix fixed within the app.
现在是时候从用户那里获得访问此文件夹的权限了。使用打开(不保存)对话框让用户确认文件夹的选择。将此视为 "confirm access dialog",您可以:
- 使用
prompt
将 "Open" 按钮的标签更改为其他内容
- 设置
title
和message
使对话框明确为确认对话框 - 使用
directoryURL
将初始文件夹设置为您要确认的文件夹的父文件夹(注意:对directoryURL
的任何更改在 对话框打开后被忽略,因此您无法使用委托将对话框锁定到该文件夹didChangeToDirectoryURL
– 在早期的沙盒中您可以,但 Apple 现在已经停止了) - 设置
delegate
并使用其shouldEnable
和validate
回调来确保只能选择您希望确认的文件夹或取消对话框。 - 将
canCreateDirectories
和canChooseFiles
设置为false
,将canChooseDirectories
设置为true
一旦用户确认了文件夹访问权限,就在您应用的首选项中保存一个安全范围的书签。您的应用现在可以随时重新获得对该文件夹的访问权限。使用该权限,您可以在该文件夹中创建和打开文件和文件夹,而无需再次使用 NSOpenPanel
或 NSSavePanel
。
从这一点开始限制用户保存在该文件夹中,建立您自己的对话框以仅询问文件名,省略路径部分,然后绕过 NSSavePanel
– 您可以模拟标准对话框或设计您的从头开始拥有。
HTH