3

NSOpenPanelに次のことを実行させようとしています。

  1. ファイルを選択できません

  2. ディレクトリとパッケージを選択できます

  3. パッケージの内容が表示されない

最初の2つのポイントを取得するには、次を使用する必要があります。

[openDlg setCanChooseFiles:NO];
[openDlg setCanChooseDirectories:YES];
[openDlg setTreatsFilePackagesAsDirectories:YES];

ただし、これは、列ビューでパッケージを選択すると、パッケージの内容が表示されることを意味します。[openDlg setCanChooseFiles:YES]; [openDlg setTreatsFilePackagesAsDirectories:NO];パッケージを選択できるが、選択したときに列ビューブラウザにコンテンツが表示されない場合に発生する動作が必要です。

何か案は?

4

2 に答える 2

1

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トリックを実行する必要がある場合があります。shouldShowFilenameshouldEnableURL

于 2012-06-17T12:42:22.283 に答える
0

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:まさに私が望んでいることを実行します!

于 2012-06-17T23:14:59.553 に答える