Table of Contents
あるアクションを行なった際にユーザーに通知したいけれど、わざわざ手動で閉じなければならないアラート(ダイアログ)で伝えるほどではないという場合、自動的に閉じてくれるアラートが表示できれば便利です。
UIAlertController で表示できるアラートにボタンをつけなければ、メッセージのみのアラートを作ることはできますが、そうするとアラートを閉じることができなくなってしまいます。
そこで、アラート表示後、一定時間が経ったらアラートが自動的に閉じるように DispatchQueue を利用して設定します。
サンプルソースコード
ボタンのないメッセージのみのアラートを表示して、0.5秒後に自動的に閉じるサンプルです。
アラート表示後に実行される completion のクロージャ内でアラートを閉じる処理を書いています。
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// アラート表示用ボタン
let button = UIButton(type: .system)
button.setTitle("alert", for: .normal)
button.addTarget(self, action: #selector(self.showAlert), for: .touchUpInside)
button.sizeToFit()
button.center = self.view.center
self.view.addSubview(button)
}
func showAlert() {
// アラート作成
let alert = UIAlertController(title: "タイトル", message: "メッセージ", preferredStyle: .alert)
// アラート表示
self.present(alert, animated: true, completion: {
// アラートを閉じる
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5, execute: {
alert.dismiss(animated: true, completion: nil)
})
})
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
DispatchQueue.main.asyncAfter によって、設定時間後に任意の処理を行わせることができます。
引数 deadline に設定した時間に execute のクロージャが実行されます。
実行結果
表示後自動的に閉じることが確認できます。
※背景が変色するのはGIFを撮影した時に出たものです


