Я пишу супер классное приложение с панелью настроек. Если пользователь открывает панель настроек, вносит изменения в свои настройки, а затем закрывает панель, не сохраняя эти изменения, он будет встречен NSAlert, информирующим его о тяжелых последствиях. На листе NSAlert есть две кнопки «ОК» и «Отмена». Если пользователь нажимает «ОК», то лист и панель настроек должны закрыться. Если пользователь нажимает «Отмена», то лист должен закрыться, но не панель prefs.
Вот упрощенная версия рассматриваемого кода:
def windowShouldClose
window_will_close = true
unless self.user_is_aware_of_unsaved_changes
window_will_close = false
alert = make_appropriate_NSAlert # this method returns an NSAlert
alert.beginSheetModalForWindow(self.window,
modalDelegate: self,
didEndSelector: :'userShouldBeAware:returnCode:contextInfo:',
contextInfo: nil)
end
window_will_close
end
def userShouldBeAware(alert, returnCode:returnCode, contextInfo:contextInfo)
if returnCode == NSAlertFirstButtonReturn
self.user_is_aware_of_unsaved_changes = true
end
end
def windowDidEndSheet(notification)
self.window.performClose(self) if self.user_is_aware_of_unsaved_changes
end
Я считаю, что мое супер-крутое приложение выполняло необходимые функции, но я обеспокоен тем, что Apple не хотела или рекомендовала бы мне реализовать эту функцию. Это похоже на взлом, и мне нигде не сказали явно, что это способ сделать это. Я попробовал несколько вещей, прежде чем наткнулся на это решение.
Я бы хотел создать модельные приложения для Mac. Есть ли какой-нибудь патен или документ, который более подробно описывает это? Я прочитал документацию Apple для класса NSAlert и их статью о Темах программирования листов .
Спасибо!