Question

J'ai un NSOpenPanel. Mais je veux faire des fichiers PDF sélectionnables uniquement. Je cherche quelque chose comme ça:

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

Je l'espère, a someboby une solution.

Était-ce utile?

La solution

Un couple de choses que je remarque .. changement setCanChooseDirectoriesto NO. Lorsqu'elle est activée, cela indique que les dossiers sont entrées valides. Ceci est probablement pas la fonctionnalité que vous voulez. Vous pouvez également modifier vos types de fichiers autorisés à [NSArray arrayWithObject:@"pdf", @"PDF", nil] pour le cas des systèmes sensibles. runModalForTypes devrait être le tableau de types de fichiers. Changez votre code pour ressembler à ceci:

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

Autres conseils

Vous êtes très proche de la réponse.

Tout d'abord, se débarrasser de [panel setCanChooseDirectories:YES] afin qu'il ne permettra pas à des répertoires en conséquence.

Alors, que ce soit à change[panel runModalForTypes:nil] [panel runModal] ou de se débarrasser de l'appel à [panel setAllowedFileTypes:] et passer le tableau à la place [panel runModalForTypes:].

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top