Swift2でUIAlertControllerをどこからでも呼び出せるようにする

いい記事が見当たらなかった
どこからでも呼び出せるようにして、ボタンをおした時の挙動は呼び出し側で定義するできるようにしてみる




アラート表示用の汎用クラス



以下をコピペ

/** アラート表示クラス */
class Alert: NSObject {

    
    /** 確認メッセージを表示する */
    static func show(
        title title: String, 
        withMsg msg:String ) {
            
            // UIAlertControllerクラスのインスタンスを生成
            // タイトル, メッセージ, Alertのスタイルを指定する
            // 第3引数のpreferredStyleでアラートの表示スタイルを指定する
            let alert: UIAlertController = UIAlertController(title: title, message: msg, preferredStyle:  UIAlertControllerStyle.Alert)
            
            
            // Alertを表示 最全面のViewControllerの取得
            var tc = UIApplication.sharedApplication().keyWindow?.rootViewController;
            while ((tc!.presentedViewController) != nil) {
                tc = tc!.presentedViewController;
            }
            tc.presentViewController(alert, animated: true, completion: nil)
    }
    
    /**
     キャンセル・OKを持つシンプルなアラート
     ```
     // 使用例
     let ok :Void -> Void = {
        print("OK")
     }
     Alert.show(
        title: "title",
        withMsg: "msg", 
        okAction: ok, 
        cancalAction: { print("cancel") })
    ```
     */
    static func show(
        title title: String, 
        withMsg msg:String, 
        okAction ok:Void -> Void, 
        cancalAction cancel:Void -> Void) {
        
        // タイトル, メッセージ, Alertのスタイル
        let alert: UIAlertController = UIAlertController(title: title, message: msg, preferredStyle:  UIAlertControllerStyle.Alert)
        
        // OKボタン
        let defaultAction: UIAlertAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler:{
            (action: UIAlertAction!) -> Void in
            ok()
        })
        // キャンセルボタン
        let cancelAction: UIAlertAction = UIAlertAction(title: "キャンセル", style: UIAlertActionStyle.Cancel, handler:{
            (action: UIAlertAction!) -> Void in
            cancel()
        })
        
        alert.addAction(cancelAction)
        alert.addAction(defaultAction)
        
        
        // Alert表示 最全面のViewControllerの取得
        var tc = UIApplication.sharedApplication().keyWindow?.rootViewController;
        while ((tc!.presentedViewController) != nil) {
            tc = tc!.presentedViewController;
        }
        tc.presentViewController(alert, animated: true, completion: nil)
    }
    
}



アラート表示用の汎用クラスの使用方法


使用方法はドキュメントコメントを見れば問題ないはず
キャンセルなど特になにもしない場合は {} を渡す

let ok :Void -> Void = {
    print("OK")
}
Alert.show(
    title: "title",
    withMsg: "msg", 
    okAction: ok, 
    cancalAction: {})


2016年8月20日土曜日