SWIFT - 帮助程序类回调

时间:2014-11-04 21:59:48

标签: function swift ios8 uialertview uialertcontroller

为了稍微管理/缩短我的代码,我决定尝试创建一个帮助程序类来管理所有警报。

这个想法是帮助程序类将创建警报。当用户按下按钮时,它将发送回调以通知viewController上的代码按下哪个按钮。然后基于此我可以发出不同的代码。

目前我已经设法正确弹出警报的代码,但是当按下按钮时我无法发送回调。

这是我迄今为止创建的警报管理器(为简单起见仍然是基本的):

var alertMgr: alertManager = alertManager()
class alertManager: NSObject {

func showAlert(titleText:String?, confirmText:String, cancelText:String, msgText:String, showCancel:Bool, showConfirm:Bool, style:UIAlertControllerStyle, viewController:UIViewController) -> Int? {


    let alertController = UIAlertController(title: titleText, message: msgText, preferredStyle: style)
    var myInt:Int!

    let actionLeft = UIAlertAction(title:cancelText, style: .Cancel) { action in

        println("0") //works when user presses cancel button
        myInt = 0
    }

    let actionRight = UIAlertAction(title:confirmText, style: .Default) { action in

        println("1") //works when user presses confirm button
        myInt = 1
    }

    alertController.addAction(actionLeft)
    alertController.addAction(actionRight)

    viewController.presentViewController(alertController, animated: true, completion: nil)

    return myInt //does not return when button is pressed???
}  
}

在我想要显示警报的代码中,我使用以下代码:

        let titleTxt:String = "title txt goes here."
        let confirmTxt:String = "confirm"
        let cancelTxt:String = "cancel"
        let msgTxt:String = "some msg goes here."
        let showCancel:Bool = true
        let showConfirm:Bool = true
        let style:UIAlertControllerStyle = .ActionSheet

        let alert = alertMgr.showAlert(titleTxt, confirmText: confirmTxt, cancelText: cancelTxt, msgText: msgTxt, showCancel: showCancel, showConfirm: showConfirm, style:style, viewController: self)

        switch alert as Int! {
            case nil:
                println("nil value")
            case 0:
                println("cancel pressed")  //never gets fired. when button is pressed
            case 1:
                println("confirm pressed") //never gets fired. when button is pressed
            default:
                break
        }

主要问题是我似乎无法通过回按钮按下按钮发送“myInt”值。我已经通过[UIAlertController]在这里搜索了几乎所有的问题,并且无法找到任何能够推动我朝着正确方向前进的提示。

任何帮助都会很棒。

1 个答案:

答案 0 :(得分:2)

showAlert在任何给定的块有机会被执行之前返回myInt的值,解决方案是将完整的动作块作为showAlert的参数传递。为了缩短签名,您可以使用text,block和flag值准备一个特殊类型,并使该函数处理此类对象的数组。