キャンセルをデフォルトにするアラートのレシピ

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