Я разрабатываю быстрое ОС Ma c, которое работает только в строке состояния (с всплывающим окном) с Application is background only
, установленным на true
.
Внутри всплывающего окна пользователь может взаимодействовать с кнопкой для сохранения изображения, более конкретно, запускается следующая функция:
@IBAction func saveImage(sender: NSButton) {
self.closePopover()
let dialog = NSSavePanel()
let date = Date()
let formattedDate = getFormattedDate(date: date, format: "yyyy-MM-dd")
let formattedTime = getFormattedDate(date: date, format: "HH.mm.ss")
dialog.level = .modalPanel
dialog.title = "Choose a destination"
dialog.nameFieldStringValue = "Screenshot \(formattedDate) at \(formattedTime)"
dialog.showsResizeIndicator = true
dialog.showsHiddenFiles = false
dialog.canCreateDirectories = true
dialog.allowedFileTypes = ["png"]
if (dialog.runModal() == .OK) {
// Pathname of the file
if let result = dialog.url {
self.screenshot!.savePNGRepresentationToURL(url: result)
}
} else {
// User clicked on "Cancel"
return
}
}
Проблема в том, что:
- Если я поставлю
Application is background only
= true
:
Я не могу взаимодействовать с NSSavePanel (не могу изменить поле save as
), и если я пишу внутри этого поля, текст пишется в последнем приложении, с которым я взаимодействовал (фокус на самом деле не модальный) ). - Если я поставлю
Application is background only
= false
:
, NSSavePanel работает отлично, но это не очень хорошее решение, потому что я не хочу, чтобы значок отображался в доке
Таким образом, проблема явно связана с Application is background only
, но я не нашел способа, чтобы оба:
- не отображали значок приложения в доке
- хорошее взаимодействие с NSSavePanel