Как открыть окно приложения при нажатии на значок док-станции?
Я удивлен, что это происходит не автоматически, но я бы хотел, чтобы окно моих приложений открывалось автоматически при нажатии на значок док-станции.
Просто, чтобы уточнить, когда я открываю приложение, окно автоматически открывается, но когда я нажимаю крест для окна, но оставляю приложение запущенным, окно не открывается, когда я нажимаю значок док-станции.
Ответы
Ответ 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) Проверенная опция "Отпустить при закрытии" не влияет на поведение выше.