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.

¿Fue útil?

Solución

A par de cosas me di cuenta .. cambio setCanChooseDirectoriesto 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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top