2
爲了管理/縮短我的代碼,我決定嘗試創建一個幫助類來管理所有警報。SWIFT - 幫助類回調
這個想法是,助手類將創建警報。當用戶按下按鈕時,它會發送回調以通知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]搜索了很多關於這個問題的所有問題,並且一直沒有找到任何提示將我推向正確方向的提示。
任何幫助將是偉大的。
謝謝你的回覆。我不是100%確定,我明白,你可以請張貼一個示例代碼,以更好地幫助我理解?同時,我會繞過,看看我能否弄清楚。謝謝:) – 2014-11-05 11:40:35
當用戶按下按鈕時,會調用「actionLeft」和「actionRight」塊,但函數showAlert立即返回 - 您可以刪除返回值,因爲它沒用。相反,您可以使用'UIAlertAction'類型的兩個參數來替換'actionLeft'和'actionRight'請注意,塊和閉包之間有區別,您可以在官方文檔中閱讀更多內容,無論如何,方法是相同的。您可以使用任何帶有閉包的標準方法作爲函數/閉包原型的示例,例如'UIView + animateWithDuration:delay:options:animations:completion: ' – 2014-11-05 13:13:23
我想我可能會有點困惑。因此,在我從showAlert中刪除返回後,並用兩個UIAlertAction參數替換actionLeft/actionRight。 VC的回調在哪裏發生?(因此,我可以根據確認/取消激活下一個代碼)感覺有點失落。 PS ....我讀了更多關於塊/關閉。但仍然沒有看到這100% – 2014-11-05 21:00:46