2010-11-27 16 views
8

私はNSOpenPanelを持っています。しかし、私はそれをPDFファイルのみを選択可能にしたい。私はそのようなものを探しています:NSOpenPanel setAllowedFileTypes

// NOT WORKING 
NSOpenPanel *panel; 

panel = [NSOpenPanel openPanel]; 
[panel setFloatingPanel:YES]; 
[panel setCanChooseDirectories:YES]; 
[panel setCanChooseFiles:YES]; 
[panel setAllowsMultipleSelection:YES]; 
[panel setAllowedFileTypes:[NSArray arrayWithObject:@"pdf"]]; 
int i = [panel runModalForTypes:nil]; 
if(i == NSOKButton){ 
    return [panel filenames]; 
} 

私はsomebobyが解決策を持っていることを望みます。

答えて

22

私が気付いたカップルのこと.. setCanChooseDirectoriesをNOに変更してください。有効にすると、これはフォルダが有効な入力であることを示します。これはあなたが望む機能ではない可能性が高いです。また、大文字と小文字を区別するシステムの場合、許可するファイルタイプを[NSArray arrayWithObject:@"pdf", @"PDF", nil]に変更することもできます。 runModalForTypesは、ファイルタイプの配列である必要があります。コードを次のように変更します。

// WORKING :) 
NSOpenPanel *panel; 
NSArray* fileTypes = [NSArray arrayWithObjects:@"pdf", @"PDF", nil]; 
panel = [NSOpenPanel openPanel]; 
[panel setFloatingPanel:YES]; 
[panel setCanChooseDirectories:NO]; 
[panel setCanChooseFiles:YES]; 
[panel setAllowsMultipleSelection:YES]; 
[panel setAllowedFileTypes:fileTypes]; 
int i = [panel runModal]; 
if(i == NSOKButton){ 
    return [panel URLs]; 
} 
+0

ありがとうございました!コードはうまく機能します! –

+0

このリークファイルタイプはありませんか? –

+0

@MKatzキャッチをありがとう。 ARCがなければ、allocは必ずリリースされなければなりません。 arrayWithObjectsに変更します: –

1

あなたはその答えに非常に近いです。

まず、[panel setCanChooseDirectories:YES]を削除して、結果としてディレクトリを許可しないようにします。

[panel runModalForTypes:nil]から[panel runModal]に変更するか、または[panel setAllowedFileTypes:]への呼び出しを取り除き、代わりに[panel runModalForTypes:]に配列を渡します。

関連する問題