NSSavePanel не может изменить имя файла

В моем приложении для Mac я использую NSSavePanel, но оно ведет себя очень странно. Иногда я не могу изменить имя файла по умолчанию.

Я использую это так:

NSSavePanel *savePanel = [NSSavePanel savePanel];
[savePanel setAllowedFileTypes:@[@"jpg"]];
[savePanel setLevel:CGShieldingWindowLevel()];

if([savePanel runModal] == NSFileHandlingPanelOKButton)
{
    //saving file
}

Я не могу понять, почему иногда он позволяет мне изменить имя файла, а иногда нет, я могу сохранить файл, но изменение имени на панели сохранения заблокировано.


person Wojtek    schedule 16.04.2015    source источник


Ответы (3)


Вы пытались указать имя по умолчанию?

[savePanel setNameFieldStringValue:@"New File.txt"];
person Rupert Pupkin    schedule 18.04.2015

Свифт 4

let panel = NSSavePanel()
panel.nameFieldStringValue = "filename.txt" // <-- user editable prompt 

if panel.runModal() == NSApplication.ModalResponse.OK, let url = panel.url {
    // use url path here
}
person l --marc l    schedule 13.06.2018

Это так странно, но я хотел бы поделиться своим решением. Как описал @Rupert Pupkin, я уже использовал nameFieldStringValue, но было странное поведение NSSavePanel, он иногда не менял имя, а иногда менялся. Итак, я вижу, что не описал уровень своего NSSavePanel

savePanel.nameFieldStringValue = "YourFileName"
savePanel.level = NSWindow.Level.modalPanel

Эти две строки кода вместе сработали для меня.

Мой текущий код NSSavePanel выглядит так:

let savePanel = NSSavePanel()
savePanel.title = "Download File"
savePanel.prompt = "Download"
savePanel.message = "Choose a directory to save your scanned document"
savePanel.nameFieldStringValue = "myfile"
savePanel.level = NSWindow.Level.modalPanel

savePanel.showsTagField = false
savePanel.isExtensionHidden = false
savePanel.canCreateDirectories = true

Надеюсь, это поможет!

person eemrah    schedule 10.06.2020