設定パネルを備えた超クールなアプリを書いています。ユーザーが設定パネルを開いて設定を変更し、それらの変更を保存せずにパネルを閉じると、悲惨な結果を知らせる NSAlert が表示されます。NSAlert シートには、「OK」と「キャンセル」の 2 つのボタンがあります。ユーザーが「OK」を押すと、シートと設定パネルが閉じます。ユーザーが「キャンセル」を押すと、シートは閉じますが、設定パネルは閉じません。
問題のコードの簡略版は次のとおりです。
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アプリを作りたいと思っています。これについてさらに詳しく説明しているパターンやドキュメントはありますか? NSAlertクラスに関する Apple のドキュメントと、Sheet Programming Topicsに関する記事を読みました。
ありがとう!