簡體   English   中英

NSOpenPanel允許選擇包但不顯示內容

[英]NSOpenPanel allowed to select packages but not show contents

我想讓NSOpenPanel執行以下操作:

  1. 無法選擇文件

  2. 可以選擇目錄和包

  3. 看不到包裝內容

為了獲得我需要使用的前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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM