Вопрос или проблема
Я работаю на трех дисплеях, и когда я запускаю свое приложение на левом дисплее, предупреждение появляется на правом дисплее. Я не думаю, что это хороший дизайн macOS. Я понимаю, что диалоги появляются на основном или активном мониторе.
Как заставить предупреждения приложения macOS появляться в самом приложении? Есть ли какая-либо команда NSUserDefaults
, которую я могу выполнить, или это особенность поведения macOS?
Ответ или решение
На macOS поведение диалоговых окон, таких как предупреждения и уведомления, зависит от того, на каком экране находится ваше приложение и какой из экранов является основным. По умолчанию такие диалоговые окна могут отображаться на любом из экранов, если оно не связано с конкретным окном приложения.
Для улучшения пользовательского опыта и того, чтобы диалоговые окна появлялись непосредственно в контексте вашего приложения, необходимо использовать правильные методы программирования.
Вот несколько рекомендаций:
-
Используйте Контекстные Окна: При создании UIAlertController (если ваше приложение написано на Swift или Objective-C) для отображения предупреждений, вы можете зафиксировать его к вашему окну приложения. Например:
let alert = UIAlertController(title: "Title", message: "Message", preferredStyle: .alert) alert.addAction(UIAlertAction(title: "OK", style: .default)) if let window = NSApplication.shared.mainWindow { window.contentViewController?.present(alert, animated: true, completion: nil) }
-
Настройка Полей: Вам необходимо убедиться, что вы инициализируете диалоговые окна в контексте текущего окна. Например, использование метода
beginSheet
для NSWindow:window.beginSheet(alert, completionHandler: nil)
-
Используйте
NSApplication
: Вы можете установитьNSApplication
для управления текущими окнами и их фокусом. Это обеспечит, что ваше приложение будет инициировать алерты через основное окно:if let mainWindow = NSApplication.shared.mainWindow { mainWindow.beginSheet(alert) }
-
Регулировка Настроек: В macOS нет специальной настройки в
NSUserDefaults
, чтобы изменить поведение системных диалоговых окон. Такое поведение является стандартным для macOS. Лучше всего использовать предложенные программные методы для отображения ваших интерфейсов. -
Проверка Версий SDK: Убедитесь, что вы используете актуальную версию SDK для вашего приложения. Многие функции и методы могут изменяться, поэтому стоит актуализировать свой Xcode.
Если вы будете следовать этим рекомендациям, то сможете контролировать поведение диалоговых окон вашего приложения и сделать их более интуитивно понятными для пользователей, обеспечивая их отображение в ожидаемом контексте.