NSOpenPanel setAllowedFileTypes
-
28-09-2019 - |
Pregunta
Tengo un NSOpenPanel. Pero quiero hacerlo archivos PDF sólo se puede seleccionar. Busco algo así:
// 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];
}
espero someboby tiene una solución.
Solución
A par de cosas me di cuenta .. cambio setCanChooseDirectories
to NO. Cuando está activado, esto indica que son las carpetas de entrada válida. Esto es lo más probable es que no la funcionalidad que desea. Usted también puede cambiar sus tipos de archivo permitidos a [NSArray arrayWithObject:@"pdf", @"PDF", nil]
para los sistemas de mayúsculas y minúsculas. runModalForTypes
debe ser la variedad de tipos de archivos. Cambiar el código para tener este aspecto:
// 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];
}
Swift 4.2:
let fileTypes = ["jpg", "png", "jpeg"]
let panel = NSOpenPanel()
panel.canChooseFiles = true
panel.canChooseDirectories = false
panel.allowsMultipleSelection = false
panel.allowedFileTypes = fileTypes
panel.beginSheetModal(for: window) { (result) in
if result.rawValue == NSApplication.ModalResponse.OK.rawValue {
// Do something with the result.
let selectedFolder = panel.urls[0]
print(selectedFolder)
}
}
Otros consejos
Estás muy cerca de la respuesta.
En primer lugar, deshacerse de [panel setCanChooseDirectories:YES]
por lo que no va a permitir que los directorios como resultado.
A continuación, ya sea a change[panel runModalForTypes:nil]
[panel runModal]
o deshacerse de la llamada a [panel setAllowedFileTypes:]
y pasar la matriz a [panel runModalForTypes:]
lugar.