我正在编写一个带有首选项面板的超酷应用程序。如果用户打开首选项面板,对她的首选项进行更改,然后在不保存这些更改的情况下关闭面板,她将收到 NSAlert 通知,告知她可怕的后果。NSAlert 表有两个按钮,“确定”和“取消”。如果用户按“确定”,则工作表和首选项面板应关闭。如果用户按下“取消”,则工作表应关闭,但不会关闭首选项面板。
这是相关代码的简化版本:
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 打算或建议我实现此功能的方式。感觉就像一个 hack,我没有被明确告知这是这样做的方法。在偶然发现这个解决方案之前,我尝试了很多东西。
我想制作模型 mac 应用程序。是否有一些模式或文件对此进行了更详细的说明?我已经阅读了 Apple 的NSAlert类文档以及他们关于Sheet Programming Topics的文章。
谢谢!