2010-11-27 84 views
6

只是看看什麼我會使用,只允許特定的文件被選中(現在圖像)NSOpenPanel - 設置文件類型?

setFileTypesArray回報

NSOpenPanel可能不-setFileTypesArray迴應:

,然後面板根本無法打開。繼承人我的代碼:

NSArray * fileTypes = [NSArray arrayWithObjects:@"png",@"tiff",@"baz",nil]; 

NSLog(@"Button Pressed"); 
[textField setStringValue:@"Test"]; 
int i; // Loop counter. 

NSOpenPanel* openDlg = [NSOpenPanel openPanel]; 

[openDlg setCanChooseFiles:YES]; 
[openDlg setFileTypesArray:fileTypes]; 

謝謝。

回答

12

你從NSSaveOpenPanel的委託

-(BOOL)panel:(id)sender shouldShowFilename:(NSString *)filename 
{ 
     NSString* ext = [filename pathExtension]; 
     if (ext == @"" || ext == @"/" || ext == nil || ext == NULL || [ext length] < 1) { 
       return TRUE; 
     } 

     NSLog(@"Ext: '%@'", ext); 

     NSEnumerator* tagEnumerator = [[NSArray arrayWithObjects:@"png", @"tiff", @"jpg", @"gif", @"jpeg", nil] objectEnumerator]; 
     NSString* allowedExt; 
     while ((allowedExt = [tagEnumerator nextObject])) 
     { 
       if ([ext caseInsensitiveCompare:allowedExt] == NSOrderedSame) 
       { 
         return TRUE; 
       } 
     } 

     return FALSE; 
} 

然後尋找一個委託方法,將您的小組的委託,以「自我」,或任何你定義上面這個方法。

+2

long depricated – 2013-10-17 10:31:37

25

[openDlg setAllowedFileTypes:fileTypes];怎麼樣?

+0

這是遠遠的bes t方法根據文件類型進行過濾 – 2012-12-30 21:43:09

9

您可以婉檢查出

[panel setAllowedFileTypes:[NSImage imageTypes]]; 

或實施委託NSOpenSavePanelDelegate

和實施

- (BOOL)panel:(id)sender shouldEnableURL:(NSURL *)url { 

    NSString * fileExtension = [url pathExtension]; 
    if (([fileExtension isEqual: @""]) || ([fileExtension isEqual: @"/"]) || (fileExtension == nil)) { 
     return YES; 
    } 

    NSSet * allowed = [NSSet setWithArray:@[@"png", @"tiff", @"jpg", @"gif", @"jpeg"]]; 
    return [allowed containsObject:[fileExtension lowercaseString]]; 

} 
+1

注意:在10.10`[NSImage imageFileTypes]`已棄用,首選方法現在爲[[NSImage imageTypes]` – Will 2016-04-06 15:17:03

1

這爲我所做的工作:

NSArray * fileTypes = [NSArray arrayWithObjects:@"png",@"jpg",@"tiff",nil]; 

[openDlg setAllowedFileTypes:fileTypes];