UIAlertController를 더욱 편리하게 하는 도우미(.Alert 한정)

17722 단어 SwiftiOS

추기 (2015.07.19)


저는 Swift에 UIAlertController의 조수 라이브러리를 썼어요.
http://qiita.com/keygx/items/e3fea65870336fe6b46c

추기 (2015.07.17)


내용이 업그레이드되어 라이브러리화되었다.
https://github.com/keygx/AlertHelperKit

 


는 UIAlertController에서 경고 표시를 하는 도우미입니다.
누르고 싶은 단추를 분리해서 처리할 수도 있습니다.
AlertHelper.swift
import UIKit

class AlertHelper: NSObject {

    class func showAlert (title: String?, message: String?, cancel: String?, destructive: [String]?, others: [String]?, parent: UIViewController, callback: (Int) -> ()) {

        // アラート要素が全てnilの場合は中止
        if title == nil && message == nil && cancel == nil && destructive == nil && others == nil {
            return
        }

        // アラート作成
        let alertController = UIAlertController(title: title?, message: message?, preferredStyle: .Alert)

        // キャンセルボタン処理
        if cancel != nil {
            let cancelAction = UIAlertAction(title: cancel!, style: .Cancel) {
                action in callback(0)
            }
            alertController.addAction(cancelAction)
        }

        let destructivOffset = 1
        var othersOffset = destructivOffset

        // Destructiveボタン処理
        if destructive != nil {
            for i in 0..<destructive!.count {
                let destructiveAction = UIAlertAction(title: destructive![i], style: .Destructive) {
                    action in callback(i + destructivOffset)
                }
                alertController.addAction(destructiveAction)

                ++othersOffset
            }
        }

        // その他ボタン処理
        if others != nil {
            for i in 0..<others!.count {
                let otherAction = UIAlertAction(title: others![i], style: .Default) {
                    action in callback(i + othersOffset)
                }
                alertController.addAction(otherAction)
            }
        }

        // アラート表示
        parent.presentViewController(alertController, animated: true, completion: nil)
    }
}

사용법


호출자는 약간 긴 (파라미터가 w가 많은) 방법으로 이런 느낌입니다.
- 경고 내용에 따라 필수 항목 설정
-title, 메시지,cancel,destructive,others가 필요 없을 때nil
-destructive,others는 여러 설정을 배열할 수 있습니다
- 취소 버튼의 buttonIndex는 항상 0이며, 이외의 버튼은 설정된 순서대로 1~
다음은 몇 가지 예를 들자.

샘플 1


먼저 [취소] [OK] 모드가 고정되어 있습니다.
AlertHelper.showAlert("アラート", message: "メッセージ", cancel: "キャンセル", destructive: nil, others: ["OK"], parent: self) {
    (buttonIndex: Int) in
    // 押されたボタンのインデックスにて処理を振り分ける
    switch buttonIndex {
        case 1 :
            // OK
            println("\(buttonIndex)")
            break
        default :
            // キャンセル
            println("\(buttonIndex)")
            break
    }
}

샘플 2


Destructive 스타일은 다음과 같습니다.
AlertHelper.showAlert("アラート", message: "メッセージ", cancel: "キャンセル", destructive: ["反対"], others: ["賛成"], parent: self) {
    (buttonIndex: Int) in
    // 押されたボタンのインデックスにて処理を振り分ける
    switch buttonIndex {
        case 1 :
            // 反対
            println("\(buttonIndex)")
            break
        case 2 :
            // 賛成
            println("\(buttonIndex)")
            break
        default :
            // キャンセル
            println("\(buttonIndex)")
            break
    }
}

샘플 3


버튼 제목이 정렬에 따라 증가합니다.그 수신자에 맞추는 것도 늘어날 거야.
AlertHelper.showAlert("アラート", message: "メッセージ", cancel: "キャンセル", destructive: nil, others: ["選択肢1", "選択肢2", "選択肢3"], parent: self) {
    (buttonIndex: Int) in
    // 押されたボタンのインデックスにて処理を振り分ける
    switch buttonIndex {
        case 1 :
            // 選択肢1
            println("\(buttonIndex)")
            break
        case 2 :
            // 選択肢2
            println("\(buttonIndex)")
            break
        case 3 :
            // 選択肢3
            println("\(buttonIndex)")
            break
        default :
            // キャンセル
            println("\(buttonIndex)")
            break
    }
}

샘플


닫을 때만 확인을 알립니다.
AlertHelper.showAlert(nil, message: "メッセージ", cancel: "確認", destructive: nil, others: nil, parent: self) {
    (buttonIndex: Int) in
    // ボタンを押されてもなにもしない
}

좋은 웹페이지 즐겨찾기