Help us understand the problem. What is going on with this article?

【Swift】アラートを表示する(Alert/ActionSheet)

More than 1 year has passed since last update.

開発環境

  • iOS9.2
  • Swift2
  • Xcode7.2

概要

ボタンを押した時などに表示されるアラートダイアログの基本的な書き方について記述します。

ポイント

  • UIAlertControllerを使用する
  • 各ボタンはUIAlertActionクラスを使用して作成する
  • アラートの表示スタイルとしてAlert/ActionSheetがある
  • ボタンの表示スタイルとしてdefault/cancel/destructiveがある
  • クロージャ(closure)でボタンを押した時の処理を書く

アラートを表示(Alert/ActionSheet)

表示スタイル:Alert

ダイアログ風のアラートが表示する

Display

Alert_Disp.png

Swift Code

AlertController.swift
// ボタンを押下した時にアラートを表示するメソッド
@IBAction func dispAlert(sender: UIButton) {

    // ① UIAlertControllerクラスのインスタンスを生成
    // タイトル, メッセージ, Alertのスタイルを指定する
    // 第3引数のpreferredStyleでアラートの表示スタイルを指定する
    let alert: UIAlertController = UIAlertController(title: "アラート表示", message: "保存してもいいですか?", preferredStyle:  UIAlertControllerStyle.Alert)

    // ② Actionの設定
    // Action初期化時にタイトル, スタイル, 押された時に実行されるハンドラを指定する
    // 第3引数のUIAlertActionStyleでボタンのスタイルを指定する
    // OKボタン
    let defaultAction: UIAlertAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler:{
        // ボタンが押された時の処理を書く(クロージャ実装)
        (action: UIAlertAction!) -> Void in
        print("OK")
    })
    // キャンセルボタン
    let cancelAction: UIAlertAction = UIAlertAction(title: "キャンセル", style: UIAlertActionStyle.Cancel, handler:{
        // ボタンが押された時の処理を書く(クロージャ実装)
        (action: UIAlertAction!) -> Void in
        print("Cancel")
    })

    // ③ UIAlertControllerにActionを追加
    alert.addAction(cancelAction)
    alert.addAction(defaultAction)

    // ④ Alertを表示
    presentViewController(alert, animated: true, completion: nil)
}

表示スタイル:ActionSheet

画面下部から出てくるアラートが表示する

Display

ActionSheet_Disp.png

Swift Code

UIAlertControllerクラスのインスタンス生成時に、第3引数のpreferredStyleにActionSheetを指定する。(その他のコードは「表示スタイル:Alert」と同じ)

AlertController.swift
let alert: UIAlertController = UIAlertController(title: "アラート表示", message: "保存してもいいですか?", preferredStyle:  UIAlertControllerStyle.ActionSheet)

ボタンのスタイルについて

以下の3タイプが指定できる

UIAlertActionStyle 説明
default 文字:標準/複数指定可
cancel 文字:ボールド/複数指定不可/最下部に位置固定
destructive 文字:赤文字/複数指定可

Display(表示スタイル:Alert)

Alert_Button.jpg

Display(表示スタイル:ActionSheet)

ActionSheet_Button.jpg

Swift Code

// Defaultボタン
let defaultAction_1: UIAlertAction = UIAlertAction(title: "default_1", style: UIAlertActionStyle.Default, handler:{
    (action: UIAlertAction!) -> Void in
    print("defaultAction_1")
})
let defaultAction_2: UIAlertAction = UIAlertAction(title: "default_2", style: UIAlertActionStyle.Default, handler:{
    (action: UIAlertAction!) -> Void in
    print("defaultAction_2")
})

// Cancelボタン
let cancelAction: UIAlertAction = UIAlertAction(title: "cancel", style: UIAlertActionStyle.Cancel, handler:{
    (action: UIAlertAction!) -> Void in
    print("cancelAction")
})

// Destructiveボタン
let destructiveAction_1: UIAlertAction = UIAlertAction(title: "destructive_1", style: UIAlertActionStyle.Destructive, handler:{
    (action: UIAlertAction!) -> Void in
    print("destructiveAction_1")
})
let destructiveAction_2: UIAlertAction = UIAlertAction(title: "destructive_2", style: UIAlertActionStyle.Destructive, handler:{
    (action: UIAlertAction!) -> Void in
    print("destructiveAction_2")
})

ボタンアクションはクロージャ(closure)で処理

Swift Code

AlertController.swift
let defaultAction: UIAlertAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler:{
    // ボタンが押された時の処理を書く(クロージャ実装)
    (action: UIAlertAction!) -> Void in
    print("OK")
})

今回は単純に、ボタンが押された時"OK"という文字列をコンソールに出力します。
また別の機会にクロージャについては書ければと思ってますが、最低限だけ触れておくと、クロージャとは、一言で言えば「名無しの関数式」のことであり、基本的な書き方は以下となります。

{(引数: 引数の型) -> (戻り値の型) in
    // 処理
}
funacchi
IT半分、舞台役者半分の、せわしい人生。 最近仕事ではマネージメントが、仕事でプログラムを書くことは少なくなりました。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした