Вопрос

У меня есть Nsopenpanel. Но я хочу сделать его PDF-файлы, выбираемые только. Я ищу что-то в этом роде:

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

Я надеюсь, что quoteby имеет решение.

Это было полезно?

Решение

Пара вещей, которые я заметил .. Изменить setCanChooseDirectoriesнет. При включении это указывает на то, что папки являются действительными вводами. Скорее всего, это не нужна функциональность. Вы также можете изменить разрешенные типы файлов на [NSArray arrayWithObject:@"pdf", @"PDF", nil] для чувствительных к регистру системам. runModalForTypes должен быть массив типов файлов. Измените свой код, чтобы выглядеть так:

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

Другие советы

Вы очень близки к ответу.

Во-первых, избавиться от [panel setCanChooseDirectories:YES] Так что это не позволит каталогам в результате.

Тогда либо изменить[panel runModalForTypes:nil] к [panel runModal] или избавиться от призыва к [panel setAllowedFileTypes:] и пройти массив [panel runModalForTypes:] вместо.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top