ユーザーに何か選んで欲しいときにダイアログで選択肢を表示したり、またユーザーに注意を喚起したりします。それらはUIAlertControllerにて簡単に設定できます。
Xcode 11.3.1
UIAlertController
元々UIAlertViewとUIActionSheetというのがあったのですがiOS8から非推奨となり、UIAlertControllerに統合されました。
alertとしては簡単な2拓
あるいは3拓なども可能です。
actionSheet としては複数の選択肢を提供するため画面下からのせり上がりになります。
それぞれ同じように作成できます。
alert
基本的な使い方は、以下のように、UIAlertControllerのインスタンスを作り、preferredStyleでalertを選択します。選択された時のアクションをUIAlertActionで設定し、表示するstyleを決めます。styleにはこのようなものがあります。
- Default
- 通常の選択肢
- Destructive
- 赤文字となり、否定的な選択肢
- Cancel
- 1つしか表示できず、一番下になる
アクションは実行内容を handler に設定します。
それぞれの選択肢のactionを追加して、UIAlertControllerを起動。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
let alertController:UIAlertController = UIAlertController(title:"alert", message: "yes or no", preferredStyle: .alert) // Default のaction let defaultAction:UIAlertAction = UIAlertAction(title: "Default", style: .default, handler:{ (action:UIAlertAction!) -> Void in // 処理 }) // Destructive のaction let destructiveAction:UIAlertAction = UIAlertAction(title: "Destructive", style: .destructive, handler:{ (action:UIAlertAction!) -> Void in // 処理 }) // Cancel のaction let cancelAction:UIAlertAction = UIAlertAction(title: "Cancel", style: .cancel, handler:{ (action:UIAlertAction!) -> Void in // 処理 }) // actionを追加 alertController.addAction(cancelAction) alertController.addAction(defaultAction) alertController.addAction(destructiveAction) // UIAlertControllerの起動 present(alertController, animated: true, completion: nil) |
actionSheet
上はスタイルが「alert」でしたがpreferredStyleを「actionSheet」にするだけでactionSheetになります。
1 2 3 4 |
let alertController:UIAlertController = UIAlertController(title:"actionSheet", message: "choose one", preferredStyle: .actionSheet) |
サンプルコード
実際の例として、2つのボタンでalertとactionSheetを表示させてみます。
ViewController.swift
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
import UIKit class ViewController: UIViewController { @IBOutlet var label:UILabel! override func viewDidLoad() { super.viewDidLoad() // 画面背景色を設定 self.view.backgroundColor = UIColor(red:0.9,green:1.0,blue:0.9,alpha:1.0) } @IBAction func buttonAlert(_ sender : Any) { // UIAlertController let alertController: UIAlertController = UIAlertController(title: "Alert", message: "Yes or No", preferredStyle: .alert) // 選択肢 // 異なる方法でactionを設定してみた let actionPositive = UIAlertAction(title: "Yes", style: .default){ action in self.labelSet("Yes") } let actionNegative = UIAlertAction(title: "NO", style: .destructive){ action in self.labelSet("NO") } let actionCancel = UIAlertAction(title: "Cancel", style: .cancel){ (action) -> Void in self.label.text = "Cancel" } // actionを追加 alertController.addAction(actionPositive) alertController.addAction(actionNegative) alertController.addAction(actionCancel) // UIAlertControllerの起動 present(alertController, animated: true, completion: nil) } @IBAction func buttonActionSheet(_ sender : Any) { // UIAlertController let alertController:UIAlertController = UIAlertController(title:"action sheet", message: "choose one", preferredStyle: .actionSheet) let actionChoise1 = UIAlertAction(title: "Choise 1", style: .default){ action in self.labelSet("Choise 1") } let actionChoise2 = UIAlertAction(title: "Choise 2", style: .default){ action in self.labelSet("Choise 2") } let actionNoChoise = UIAlertAction(title: "No Choise", style: .destructive){ action in self.labelSet("No Choise") } let actionCancel = UIAlertAction(title: "Cancel", style: .cancel){ (action) -> Void in self.label.text = "Cancel" } // actionを追加 alertController.addAction(actionChoise1) alertController.addAction(actionChoise2) alertController.addAction(actionNoChoise) alertController.addAction(actionCancel) // UIAlertControllerの起動 present(alertController, animated: true, completion: nil) } func labelSet(_ str:String){ label.text = str } } |
UILabelを1つと
UIButtonを2つstoryboardに配置してコードと紐付けします。
サンプル動画
サンプルコードを実行してみました。
Reference:
UIAlertController – UIKit | Apple Developer Documentation
UIAlertControllerStyle – UIKit | Apple Developer Documentation