Закрытие приложения Mac (щелчок по красному крестику вверху) и повторное открытие, щелкнув значок док-станции

Когда я закрываю приложение Mac (нажав кнопку с красным крестиком на верхней панели окна), значок приложения остается в доке внизу. Теперь это нормальное поведение. Когда пользователь нажимает на нее еще раз, приложение не запускается, если пользователь полностью не выйдет из приложения и не перезапустит его снова.

Аналогичным примером в Mac OS X является «Монитор активности». Вы можете закрыть приложение, нажав кнопку с красным крестиком вверху, но значок док-станции останется там. Пользователь может повторно открыть его, щелкнув значок док-станции.

Как я могу добиться этого в собственном приложении?


person Leo    schedule 31.03.2011    source источник


Ответы (3)


Если вас все еще беспокоит, как снова открыть окно, которое вы закрыли, используйте этот метод:

- (BOOL)applicationShouldHandleReopen:(NSApplication *)theApplication hasVisibleWindows:(BOOL)flag {

[window makeKeyAndOrderFront:self];

return YES;
}

Вы можете использовать это для обработки щелчков по значку приложения в доке.

Для получения дополнительной информации см. Справочник по протоколу NSApplicationDelegate.

Вот документация:

http://developer.apple.com/library/mac/#documentation/cocoa/reference/NSApplicationDelegate_Protocol/Reference/Reference.html

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

Последнее обновление:

В последней версии Xcode 11.4 на MacOS 10.15 с Swift 5.2 такая же проблема существует в приложении MacOS SwiftUI. Добавление следующего кода в AppDelegates.swift решает проблему.

func applicationShouldHandleReopen(_ sender: NSApplication, hasVisibleWindows flag: Bool) -> Bool {
    if !flag{
        window.makeKeyAndOrderFront(nil)
    }
    return true
}
person Johann Dirdal    schedule 31.03.2011

Реализуйте метод

- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)sender
{ 
return NO; 
}

в вашем приложении делегат

Ваше приложение будет зависать после закрытия окна, а затем, если вы реализуете

- (void)applicationDidBecomeActive:(NSNotification *)aNotification
{
//dock icon has just been clicked , or cmd-tabbed into
}

в приложении делегат

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

См. http://developer.apple.com/library/mac/#documentation/cocoa/reference/NSApplicationDelegate_Protocol/Reference/Reference.html для других соответствующих событий приложения.

person Warren Burton    schedule 31.03.2011
comment
Он говорит, что в applicationDidBecomeActive вы можете увидеть, работает ли приложение без окон, и если это так, открыть новое пустое окно (или подобное). - person Tom Andersen; 31.03.2011

Я думаю, что приведенные выше ответы не совсем верны, для этого вы должны переопределить applicationShouldHandleReopen(_:hasVisibleWindows:) https://developer.apple.com/reference/appkit/nsapplicationdelegate/1428638-applicationshouldhandlereopen

person Ivan Ičin    schedule 02.05.2017