アラートを表示する(NSAlert)

f:id:tid-a24:20190315214917p:plain

アラートの表示

アラートを作る

let alert = NSAlert()

ダイアログとして表示

f:id:tid-a24:20190315220244p:plain

alert.runModal()
押されたボタンを確認

runModal()の戻り値で確認できます。

let response = alert.runModal()
switch response {
case .alertFirstButtonReturn:
    break
case .alertSecondButtonReturn:
    break
case .alertThirdButtonReturn:
    break
default:
    break
}

シートとして表示する

f:id:tid-a24:20190315220318p:plain

alert.beginSheetModal(for: window, completionHandler: nil)
押されたボタンを確認する

シート表示の第2引数のクロージャで確認できます。

alert.beginSheetModal(for: window) { response in
    switch response {
    case .alertFirstButtonReturn:
        break
    case .alertSecondButtonReturn:
        break
    case .alertThirdButtonReturn:
        break
    default:
        break
    }
}

アラートのカスタマイズ

アイコン

デフォルトではアプリのアイコンが使用されますが変更可能です。

f:id:tid-a24:20190315220120p:plain

alert.icon = NSImage(named: “Awesome icon”)

スタイル

スタイルは下記の3種類が用意されています。 今のところinformationalとwarningは見た目上の違いはないそうです。 criticalについてはmacOS Human Interface Guidelinesの”Alerts”の章に従って使用するようにします。

informational

f:id:tid-a24:20190315220120p:plain

alert.alertStyle = .informational
warning

f:id:tid-a24:20190315220120p:plain

alert.alertStyle = .warning

critical

f:id:tid-a24:20190315215243p:plain

alert.alertStyle = .critical

メッセージ

f:id:tid-a24:20190315215535p:plain

  • タイトル変更
alert.messageText = “Main Message”
  • 追加テキスト変更
alert.informativeText = “Additional information text”

ボタン

addButton(withTitle:)でボタンを追加できます。 これを使うとデフォルトのボタンは使われなくなります。 1回addButton(withTitle:)を呼ぶと1個、2回呼ぶと2個…という風にボタンが増えていきます。 任意の数のボタンを追加できますが、3個までが想定されている個数のようです。

ここでは2個のボタンを追加する例をあげます。

f:id:tid-a24:20190315215525p:plain

alert.addButton(withTitle: “OK”)
alert.addButton(withTitle: “Cancel”)

抑制ボタン

“次からこのメッセージを表示しない。”チェックボックスを表示できます。

f:id:tid-a24:20190315215902p:plain

alert.showsSuppressionButton = true
抑制ボタンのメッセージを変更

抑制ボタンはNSButtonなのでメッセージを変更できます。

f:id:tid-a24:20190315215332p:plain

alert.suppressionButton?.title = “No thank you”

アクセサリービュー

独自のビューを表示したい時はアクセサリービューとして設定します。 アクセサリービューはNSViewならなんでも表示できます。 抑制ボタンとボタンの間に表示されます。

f:id:tid-a24:20190315220014p:plain

let textView = NSTextView(frame: NSRect(x: 0, y: 0, width: 200, height: 150))
textView.string = “TEXT IN ACCESSORYVIEW”
alert.accessoryView = textView

参考

developer.apple.com

developer.apple.com