UIAlertController 使ってみた

UIAlertController を使うことで Alert や Action Sheet を画面に表示することができます。 Alert や Action Sheet とはこういうやつ↓です。

Alert Action Sheet
f:id:komaji504:20161024011540p:plain f:id:komaji504:20161024011551p:plain

使う際の流れとしては、以下のような感じです。 Alert も Action Sheet もやることは同じなので Alert について書きます。

  1. Alert となる UIAlertController のインスタンスを生成する
  2. 表示する各項目 (キャンセルボタンとか) を作る
  3. 各項目をインスタンスに設定する
  4. 表示する ViewController で present する

Alert となる UIAlertController のインスタンスを生成する

インスタンス生成時にタイトルとメッセージと Action か Action Sheet かを設定します。

let alert = UIAlertController(title: "Alert",
                              message: "Alert Message",
                              preferredStyle: .alert // ここを .actionSheet に変えると Action Sheet になります
)

表示する各項目 (キャンセルボタンとか) を作る

項目の style (UIAlertActionStyle) は .default, .destructive, cancel の3つがあります。
.cancel 以外は複数指定できます。

let defaultAction = UIAlertAction(title: "Default",
                                  style: .default,
                                  handler: { action in
                                    print("Default")
})

let destructiveAction = UIAlertAction(title: "Destructive",
                                      style: .destructive,
                                      handler: { action in
                                        print("Destructive")
})

let cancelAction = UIAlertAction(title: "Cancel",
                                 style: .cancel,
                                 handler: { action in
                                    print("Cancel")
})

各項目をインスタンスに設定する

インスタンスに対して addAction(action: UIAlertAction) で設定できます。

alert.addAction(defaultAction)
alert.addAction(destructiveAction)
alert.addAction(cancelAction)

表示する ViewController で present する

現在表示されている ViewController で Alert を表示する場合は以下のように書きます。

present(alert, animated: true, completion: nil)

iPad 対応

iPad の場合、 Action Sheet はポップオーバーで表示されます。

Action Sheet for iPad
f:id:komaji504:20161024012758p:plain

この時、以下の設定がされていないとクラッシュするので忘れないよう気をつけてください。

// 表示先の View
actionSheet.popoverPresentationController?.sourceView = view
// 表示場所
actionSheet.popoverPresentationController?.sourceRect = rect

サンプル

こちらにサンプルを置いたので良かったら試してみてください。

github.com