2010-11-27 23 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

謝謝!代碼工作得很好! – 2010-11-27 22:31:59

1

您非常接近答案。

首先,擺脫[panel setCanChooseDirectories:YES],以便它不會允許目錄。

然後,更改[panel runModalForTypes:nil][panel runModal]或擺脫調用[panel setAllowedFileTypes:]和數組傳遞給[panel runModalForTypes:]代替。