This is not a proper answer, but may shed some light on the issue (which I'm struggling with as well).
What I have found so far, is that if you do not have an active window when you call
result = panel.runModal() // swift
NSModalResponse result = [panel runModal]; // Obj-C
Then the behavior of NSSavePanel
is broken, and although you can click in the name field you can't type there (beeps if you try).
I also found an ugly little workaround. If you allow creating new directories,
panel.canCreateDirectories = YES; // Obj-C
and press the button in the save panel to do this - a small sheet (yet another window...) appears on top of the NSSavePanel
and if you cancel and dismiss this sheet - you regain ability to type in the name field.
Since OP did not provide any description of the programmatic scenario and environment for his issue, but it seems related since forcing the window-level to be "modal" fixed the issue for him.
In my case (I'm opening NSSavePanel
from a menu-bar item pop-over window. Alas the popover closes BEFORE my NSSavePanel manages "to attach to it". Manually setting the level
panel.level = NSWindow.Level.modalPanel // Swift
panel.level = NSModalPanelWindowLevel; // Obj-C
did NOT help resolve the issue.