キャンセルをデフォルトにするアラートのレシピ
macOSアプリケーションで、メインウインドウを閉じると終了するようになっている時、アプリケーションが動作中である場合を考える。
この場合、アラートを表示して本当に終了するか尋ねることになるが、そのアラートの作り方が自分にはちょっとトリッキーに思えたので、レシピをメモしておく。
このアラートを作る
ためのコードは次のようになる。
let anAlert = NSAlert()
anAlert.messageText = NSLocalizedString("Working!!", comment: "Working")
anAlert.informativeText = NSLocalizedString("I'm working, Areyou sure you want to quit now?", comment: "Working Info")
anAlert.addButton(withTitle: "OK")
anAlert.addButton(withTitle: NSLocalizedString("Cancel", comment: "Cancel"))
anAlert.buttons[0].keyEquivalent = "\033"
anAlert.buttons[1].keyEquivalent = "\r"
ここでのポイントは、6, 7行目のkeyEquivalentの設定である。このやり方はこちらを参考にした。
次にアラートの表示と処理である。
anAlert.beginSheetModal(for: NSApplication.shared.mainWindow!, completionHandler: { (returnCode: NSApplication.ModalResponse) in
if returnCode == NSApplication.ModalResponse(rawValue: 1000) {
NSApp.terminate(self)
}
})
この部分では、3行目のNSApplication.ModalResponse(rawValue: 1000)
をひねり出したことに尽きる。とにかくいろいろ試して、結果これが正しい事が分かった。
自分は頭が悪く、APIリファレンスを読み解いてプログラムを書くような正しい
人間ではない。よって、このようにケースバイケースの事例をメモしていくことになる。
以上。
この投稿へのトラックバック
トラックバックはありません。
- トラックバック URL
この投稿へのコメント