##目的
UIAlertControllerを使う時、配置を混同しがちなので、その備忘録を作りました。
##動作環境
XcodeのバージョンはVersion 11.6 です。
##備忘録に使うサンプル
画像を保存するものです。
##コードの配置(概要)
基本の並びは下記の通りです。
①UIAlertControllerをインスタンス化
②UIAlertAction(UIAlertControllerに載せる選択肢)をインスタンス化
③UIAlertControllerを表示
###①UIAlertControllerをインスタンス化
####引数の設定
#####title ・・・ 名前の通り、タイトルの設定です。 String型で設定すると、メッセージの上に表示されます。
#####message ・・・ これも名前の通りです。表示させたい文をString型で設定します。
#####preferredStyle ・・・ これは表示の仕方です。.alert か .actionSheet を選びます。.alertは上の画像のような形です。.actionSheet は下のような形です。
###②UIAlertAction(UIAlertControllerに載せる選択肢)をインスタンス化
表示させたい選択肢の分だけUIAlertActionを記述して、追加していきます。
###引数の設定
#####title ・・・ 表示する文です。String型で設定します。
#####style ・・・ 選択した時の動きの表示を設定します。 .cancel .default .destructiveの3つから選びます。前からキャンセル、アクション、デリートとなります。あくまで表示の設定なので、例えばキャンセルに設定したからといって、キャンセルボタンみたいな動きにはなりません。.cancelは太字になり、.destructiveの表示は赤字になります。
#####handler ・・・ styleで、表示をタップした時に起こる行動をクロージャにて設定します。タップした後のコードをここに書き込むことで、UIAlertActionがようやく機能を持ちます。
サンプルでは.defaultの方に保存をタップした場合に画像が変数の中に入っていれば、画像を端末に保存するコードが記述されており、.cancelの方には画面を閉じて前の画面に戻るというコードが記述されています。クロージャ内の記述ではselfを忘れがちなので、気を付けましょう。
引数の設定およびクロージャ内のコード記述が終わったら、alertController.addAction()を記述して、alertControllerの選択肢として表示に追加します。
※alertController.preferredAction = alertActionの文はなくても動きます。これは、.defaultのスタイルで表示させた場合、文字を太字にできます。コードはalertController.addAction()の後に書きます。
###③UIAlertControllerを表示
present(UIAlertController,animated: Bool)を記述してUIAlertControllerを表示させます。
##サンプルに使ったコード
let alertController = UIAlertController(title: nil, message: "保存しますか?", preferredStyle: .actionSheet)
let alertAction = UIAlertAction(title: "保存", style: .default, handler: { (act) in
if self.pictureImage.image == self.pictureImage.image{
UIImageWriteToSavedPhotosAlbum(self.pictureImage.image!, self, nil, nil)
}
})
alertController.addAction(alertAction)
alertController.preferredAction = alertAction
let cancelAction = UIAlertAction(title: "キャンセル", style: .cancel, handler: {(act) in
self.dismiss(animated: true, completion: nil)
})
alertController.addAction(cancelAction)
present(alertController,animated: true)