Как я могу предотвратить потерю фокуса моим приложением в строке меню Mac? - PullRequest
0 голосов
/ 07 июля 2019

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

var windowController : NSWindowController!

let mainStoryBoard = NSStoryboard(name: NSStoryboard.Name("StoryboardName"), bundle: nil)
windowController = mainStoryBoard.instantiateController(withIdentifier: NSStoryboard.SceneIdentifier("WindowID")) as! NSWindowController
windowController.showWindow(self)

Я также активирую приложение, игнорируя все остальные приложения, и делаю ключ окна и основной. Это работает нормально, однако моя проблема заключается в том, что как только я покидаю окно (например, открывая управление полетом или переключаясь в другое пространство) и возвращаюсь к окну (закрывая управление полетом или возвращаясь в исходное пространство), мое приложение мое окно больше не сфокусировано, мое окно опускается назад, и любое приложение, которое было позади моего, теперь активно.

Так что, если у меня окно моего приложения поверх окна Safari, я переключаюсь на другое пространство, а затем возвращаюсь, мое приложение теперь «потеряно» за окном Safari, и Safari активен. Я попытался удалить ключ info.plist «Приложение только для фона», чтобы в приложении была значок закрепления, и проблема не исчезла. Что я делаю неправильно? И как мне заставить мои окна вести себя как обычные окна? Помогите! Спасибо.

1 Ответ

0 голосов
/ 12 июля 2019

Я не могу повторить поведение, которое вы описываете. Мое окно остается там, где я его оставляю. Вы делаете окно свойством AppDelegate, как это?

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate, NSWindowDelegate
{
    let statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength)

    var prefsWindow: NSWindow?

    func showMyWindow() // called from menu item
    {
        if prefsWindow == nil
        {
            let storyboard = NSStoryboard(name: NSStoryboard.Name("Main"), bundle: nil)
            let controllerId = NSStoryboard.SceneIdentifier("myWindow")
            guard let controller = storyboard.instantiateController(withIdentifier: controllerId) as? NSWindowController else { return }
            guard let window = controller.window else { return }

            window.delegate = self
            window.center()
            prefsWindow = window
        }

        prefsWindow?.makeKeyAndOrderFront(self)
        NSApp.activate(ignoringOtherApps: true)
    }

    func windowWillClose(_ notification: Notification)
    {
        prefsWindow = nil
    }
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...