Frage

Ich habe einen NSOpenPanel. Aber ich will es PDF-Dateien nur wählbar machen. Ich suche nach etwas wie folgt aus:

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

Ich hoffe, hat someboby eine Lösung.

War es hilfreich?

Lösung

Ein paar Dinge bemerkte ich .. Änderung setCanChooseDirectoriesto NO. Wenn diese Funktion aktiviert dies zeigt, dass Ordner gültige Eingabe sind. Dies ist wahrscheinlich nicht die Funktionalität, die Sie wollen. Vielleicht möchten Sie auch Ihre erlaubte Dateitypen [NSArray arrayWithObject:@"pdf", @"PDF", nil] für Groß- und Kleinschreibung Systeme ändern. runModalForTypes sollte das Array von Dateitypen sein. Ändern Sie den Code wie folgt aussehen:

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

Andere Tipps

Sie sind sehr nah an die Antwort.

Als erstes werde [panel setCanChooseDirectories:YES] befreien, so dass es Verzeichnisse als Ergebnis wird nicht zulassen.

Dann wird entweder change[panel runModalForTypes:nil] zu [panel runModal] oder loszuwerden des Anrufs [panel setAllowedFileTypes:] und übergeben Sie das Array [panel runModalForTypes:] statt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top