[Swift3.0] ボタンなしの UIAlertController を表示して一定時間後に閉じる

2016年11月1日(更新: 2016年11月1日)

あるアクションを行なった際にユーザーに通知したいけれど、わざわざ手動で閉じなければならないアラート(ダイアログ)で伝えるほどではないという場合、自動的に閉じてくれるアラートが表示できれば便利です。

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 のクロージャが実行されます。

実行結果

表示後自動的に閉じることが確認できます。

自動的に閉じるボタンなしのUIAlertController

※背景が変色するのはGIFを撮影した時に出たものです

コメントを残す

メールアドレスが公開されることはありません。