Domanda

Ho un NSOpenPanel. Ma voglio farlo file PDF selezionato solo. Sto cercando qualcosa di simile:

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

Spero ha someboby una soluzione.

È stato utile?

Soluzione

Un paio di cose che ho notato .. cambiamento setCanChooseDirectoriesto NO. Quando è abilitato questo indica che le cartelle sono input valido. Questo è molto probabilmente non la funzionalità desiderata. Si potrebbe anche voler modificare i tipi di file consentiti per [NSArray arrayWithObject:@"pdf", @"PDF", nil] per i sistemi di maiuscole e minuscole. runModalForTypes dovrebbe essere la matrice di tipi di file. Modificare il codice per assomigliare a questo:

// 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)
    }
}

Altri suggerimenti

Vi sono molto vicino alla risposta.

In primo luogo, sbarazzarsi di [panel setCanChooseDirectories:YES] in modo che non permetterà le directory come un risultato.

Quindi, sia per change[panel runModalForTypes:nil] [panel runModal] o sbarazzarsi della chiamata alla [panel setAllowedFileTypes:] e passare la matrice per [panel runModalForTypes:] invece.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top