Подтвердить что ты не робот

Как открыть окно приложения при нажатии на значок док-станции?

Я удивлен, что это происходит не автоматически, но я бы хотел, чтобы окно моих приложений открывалось автоматически при нажатии на значок док-станции.

Просто, чтобы уточнить, когда я открываю приложение, окно автоматически открывается, но когда я нажимаю крест для окна, но оставляю приложение запущенным, окно не открывается, когда я нажимаю значок док-станции.

4b9b3361

Ответ 1

Внесите - (BOOL)applicationShouldHandleReopen:(NSApplication *)theApplication hasVisibleWindows:(BOOL)flag в делегат приложения. Проверьте документацию на детали возвращаемого значения.

Приложения на основе документов и приложения, не основанные на документах, ведут себя несколько иначе. Если нет открытых окон при щелчке значка док-станции приложения на основе документа, он создаст новый документ. Если открытых окон нет, если щелкнуть значок док-станции приложения, не связанного с документами, он ничего не сделает.

Ответ 2

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

Реализовано это в AppDelegate, окно определяется как переменная экземпляра одного и того же объекта.

- (BOOL) applicationShouldOpenUntitledFile:(NSApplication *)sender
{
    [window makeKeyAndOrderFront:self];
    return NO;
}

Если у кого-то есть лучшее решение, ответьте. Спасибо!

Ответ 3

- (BOOL)applicationShouldHandleReopen:(NSApplication *)theApplication hasVisibleWindows:(BOOL)flag
{
    if (flag) {
        return NO;
    }
    else
    {
       [YourWindow makeKeyAndOrderFront:self];// Window that you want open while click on dock app icon
        return YES;
    }
}

Ответ 4

Приложение на основе документов автоматически откроет новый документ без названия, когда приложение станет активным, поэтому я предполагаю, что вы ссылаетесь на приложение, основанное на документе.

Внедрите метод applicationDidBecomeActive: в делетете приложения и откройте/покажите окно.

Edit:

Некоторая информация о Делегаты.

Некоторая информация о Открытие и закрытие Windows и NSWindow API

Ответ 5

Решения для добавления к принятому ответу:

С принятым ответом вновь открытое окно больше не реагирует на события мыши.

При использовании принятого ответа вам также необходимо снять флажок "Отпустить при закрытии" в Инспекторе атрибутов окна в IB. Это устраняет проблему с нерешенным окном.

Ответ 6

Как указывали другие, использование метода applicationShouldHandleReopen для повторного открытия закрытых окон в приложениях без документов - правильный путь. Единственное изменение, которое я хочу добавить, - это более гибкий способ проверить, какое окно должно быть повторно отображено, путем повторения в списке NSApplication видимого и невидимого .windows и проверки необходимого окна.

func applicationShouldHandleReopen(_ sender: NSApplication, hasVisibleWindows flag: Bool) -> Bool {

    if flag == false {

        for window in sender.windows {

            if (window.delegate?.isKind(of: WelcomeWindowController.self)) == true {
                window.makeKeyAndOrderFront(self)
            }
        }
    }

    return true
}

Приложение

a) Если окно было скрыто, оно будет отображаться автоматически, когда пользователь нажмет значок приложения Dock, поэтому нет необходимости реализовывать метод applicationShouldHandleReopen.

b) Проверенная опция "Отпустить при закрытии" не влияет на поведение выше.