[英]NSOpenPanel allowed to select packages but not show contents
我想讓NSOpenPanel執行以下操作:
無法選擇文件
可以選擇目錄和包
看不到包裝內容
為了獲得我需要使用的前2個點:
[openDlg setCanChooseFiles:NO];
[openDlg setCanChooseDirectories:YES];
[openDlg setTreatsFilePackagesAsDirectories:YES];
但是,這意味着在列視圖和選擇包時,將顯示包的內容。 我想要[openDlg setCanChooseFiles:YES]; [openDlg setTreatsFilePackagesAsDirectories:NO];
時發生的行為[openDlg setCanChooseFiles:YES]; [openDlg setTreatsFilePackagesAsDirectories:NO];
[openDlg setCanChooseFiles:YES]; [openDlg setTreatsFilePackagesAsDirectories:NO];
即可以選擇包,但列視圖瀏覽器在選擇時不顯示內容。
有任何想法嗎?
在NSSavePanel的委托中有一個現已棄用的方法,方法名稱為:
- (BOOL) panel: (id) sender shouldShowFilename: (NSString *) filename]
這可以用來告訴保存面板不顯示某些文件名。
有關如何使用它的詳細信息可以在Apple QA技術說明中看到,它詳細說明了如何完成與您嘗試的相反的操作(他們的示例是如何選擇任何文件但忽略包,但您可以翻轉內部邏輯)。
現在,請記住,我說該方法已被“棄用”。 NSSavePanel頭文件說明了這一點:
/* This method is deprecated in 10.6, and will be formally deprecated */
/* in a future release. Use panel:shouldEnableURL: instead */
- (BOOL)panel:(id)sender shouldShowFilename:(NSString *)filename;
NSOpenSavePanelDelegate的panel:shouldEnableURL:
顯然它只是允許或禁止文件可選。
為了面向未來的應用程序,您可能需要執行respondsToSelector
技巧 ,以確保在使用不太理想的“ shouldEnableURL
”方法之前,“ shouldShowFilename
”仍然可用作選項。
我實現了NSOpenPanelDelegate方法panel:shouldEnableURL:
如下:
- (BOOL)panel:(id)sender shouldEnableURL:(NSURL *)url {
BOOL showObject = NO;
// This checks if the path is a directory
[[NSFileManager defaultManager] fileExistsAtPath:[url path] isDirectory:&showObject];
// This checks if the path is a package
if ([[NSWorkspace sharedWorkspace] isFilePackageAtPath:[url path]]) {
showObject = YES;
}
return showObject;
}
這不需要任何進一步的配置(如setCanChooseDirectories:
,並且完全符合我的要求!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.