概要
アラートを表示した後指定した時間で閉じ、さらにその後処理を実行する方法です。
今回は閉じるボタンをつけていないですが、必要に応じてaddActionを使ってボタンを追加します。
コード
1. アラートを表示するメソッドを作成する
func showAutoDismissAlert(title: String, message: String, completion: (() -> Void)?) {
let alert = UIAlertController(title: title, message: message, preferredStyle: .alert)
present(alert, animated: true)
DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
alert.dismiss(animated: true) {
// アラートが閉じられた後にコードを実行
completion?()
}
}
}
DispatchQueue.main.asyncAfter
を用いて2秒後に閉じるように設定しています。2.0
を変更すると、任意に閉じるまでの時間を指定することができます。
completion
を引数に指定することで、showAutoDismissAlert
を呼び出す際にクロージャでアラートが閉じた後に実行したいコードを渡すことができます。
2.作成したメソッドを呼び出す
showAutoDismissAlert(title: "ありがとうございました", message: "2秒後に閉じます") {
// アラートが閉じた後に実行するコード
// 画面遷移など
hogehoge()
}
showAutoDismissAlert
にアラート表示内容のtitle
,message
を渡し、クロージャ内で処理を記述します。
処理を行わない場合
showAutoDismissAlert(title: "ご利用いただきありがとうございました。", message: "ログイン画面に移動します", completion: nil)
completion
にnil
を渡すことで処理を行わずに閉じることもできます。
おわりに
このような自動で消えるダイアログは、例えば削除などの処理を終えた時に活躍します。
例えば画面遷移する場合、これからどの画面に移動するのかをアラートで明示し、アラートが消えた後に画面遷移するとユーザー体験が向上すると感じます。
実装してみて、ちょっとリッチなアプリになった気がします。
お読みいただき、ありがとうございました。