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を撮影した時に出たものです