2010-11-27 12 views
6

Con sólo mirar en lo que yo usaría para permitir sólo determinados ficheros para ser seleccionados (Imágenes por ahora)NSOpenPanel - ¿Establecer tipo de archivo?

setFileTypesArray vuelve

NSOpenPanel puede no responder a -setFileTypesArray:

y luego el panel no se abre en absoluto. Aquí está mi código:

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

Gracias.

Respuesta

12

Usted está buscando un método delegado de delegado de 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; 
} 

A continuación, establezca el delegado de la central para que "sí", o donde quiera que su definen este método anterior.

+2

privated long –

25

¿Qué tal [openDlg setAllowedFileTypes:fileTypes];?

+0

Esto es por lejos de los bes t método para filtrar por tipos de archivo –

8

El método que está buscando es setAllowedFileTypes - vea los documentos para la clase principal, NSSavePanel.

9

Es posible que wan de revisar

[panel setAllowedFileTypes:[NSImage imageTypes]]; 

o implementar el delegado NSOpenSavePanelDelegate

e implementar

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

Nota: En 10.10 '[NSImage imageFileTypes]' quedó obsoleto y el método preferido es ahora '[NSImage imageTypes]' – Will

+1

gracias, editado ... –

1

Este trabajo lo hizo para mí:

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

[openDlg setAllowedFileTypes:fileTypes];  
Cuestiones relacionadas