2010-11-27 9 views
6

Einfach mal auf, was ich nur verwenden würde erlauben bestimmte Dateien (Bilder jetzt) ​​NSOpenPanel - Dateityp festlegen?

setFileTypesArray kehrt

NSOpenPanel ausgewählt werden, um -setFileTypesArray nicht reagieren kann:

und dann das Panel öffnet sich überhaupt nicht. Heres mein Code:

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]; 

Danke.

Antwort

12

Sie sind für eine delegierte Methode von NSSaveOpenPanel Delegierter

-(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; 
} 

Dann suchen, stellen Sie delegieren Ihre Panels zu „Selbst“, oder wo auch immer Ihr diese Methode oben definieren.

+2

lange depricated –

25

Wie wäre es [openDlg setAllowedFileTypes:fileTypes];?

+0

Dies ist durch weit die Bes t Verfahren nach Dateitypen filtern –

8

Die Methode, die Sie suchen, ist setAllowedFileTypes - finden Sie in der Dokumentation für die Elternklasse, NSSavePanel.

9

Sie wan kann

[panel setAllowedFileTypes:[NSImage imageTypes]]; 

zu überprüfen oder implementieren den Delegaten NSOpenSavePanelDelegate

und implementieren

- (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

Hinweis: 10.10 '[NSImage imageFileTypes]' wurde als veraltet und die bevorzugte Methode ist jetzt '[NSImage imagetypes]' – Will

+1

Dank, herausgegeben ... –

1

Das hat für mich arbeiten:

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

[openDlg setAllowedFileTypes:fileTypes];