2010-11-27 51 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];