2016-02-19 3 views
2

Voici mon codeUIAlertView ne pas retourner valeur appropriée

import Foundation 
import UIKit 

class Alert: UIViewController { 


class func showAlert(title: String, message: String, buttonTitle: String? = nil, buttonTitle2: String? = nil, sender: UIViewController) -> Int? { 
    var flag : Int? 
    func yes(){ 
     flag = 1 

    } 
    func no(){ 
     flag = 0 

    } 
    //= nil ; 
    if objc_getClass("UIAlertController") != nil { 
     let alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.Alert) 
     if (buttonTitle != nil){ 
      alert.addAction(UIAlertAction(title: buttonTitle, style: UIAlertActionStyle.Default, handler: { (action: UIAlertAction!) in 
      yes() 


     })) 
     } 
     if (buttonTitle2 != nil) { 
      alert.addAction(UIAlertAction(title: buttonTitle2, style: UIAlertActionStyle.Default, handler: { (action: UIAlertAction!) in 
       no() 

      })) 
     } 


     sender.presentViewController(alert, animated: true, completion: nil) 

     return flag 


    } else { 
     let alert = UIAlertView() 
     alert.title = title 
     alert.message = message 
     alert.addButtonWithTitle(buttonTitle) 
     alert.addButtonWithTitle(buttonTitle2) 
     print("inside Else") 

     alert.show() 
     return flag 
     //make and use a UIAlertView 
    } 

} 


} 

Le problème est que le drapeau se retourne est toujours nul au contrôleur de vue que j'appelle Alert de. J'ai besoin de l'indicateur pour retourner 1 si "oui" est pressé et 0 si "non" est pressé. J'ai été coincé dans ce problème pendant beaucoup de temps. Aidez-moi.

+0

C'est un 'UIAlertController'. Le 'UIAlertView' est obsolète. –

Répondre

0

Vous avez fait une erreur que la fermeture ne sera pas exécuter jusqu'à ce que le bouton cliqué, mais la fonction retournera à droite now.You devrait fournir une fermeture à cette function.It ressemblera:

class func showAlert(title: String, message: String, buttonTitle: String? = nil, buttonTitle2: String? = nil, sender: UIViewController,handler: ((Bool) -> Void)) -> Void 

et la poignée en alerte action comme ceci:

handler(true) 
+0

Comment ajouter une valeur par défaut au gestionnaire car showAlert est appelé dans de nombreux cas et tous n'ont pas besoin d'une valeur de retour? – MrDank

+0

Même si je ne réussis pas le paramètre handler, l'alerte de show devrait être exécutée. – MrDank

+0

@DarthVader Vous devez gérer votre action de clic en fermeture, si vous ne pouvez pas le faire, utilisez la fermeture pour passer cette action. Rappelez-vous ceci. – Lumialxk

2

Essayez ce code,

import UIKit 

class ViewController: UIViewController { 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

@IBAction func showAlert() { 
    let alertController = UIAlertController(title: "Hey there", message: "Do you want to do it?", preferredStyle: .Alert) 

    let btnAction1 = UIAlertAction(title: "Yes", style: .Default) { (action : UIAlertAction) -> Void in 
     self.yes() 
    } 

    let btnAction2 = UIAlertAction(title: "No", style: .Default) { (action : UIAlertAction) -> Void in 
     self.no() 
    } 

    alertController.addAction(btnAction1) 
    alertController.addAction(btnAction2) 

    presentViewController(alertController, animated: true, completion: nil) 
} 

func yes() -> Int 
{ 
    print("Yes") 
    return 1 
} 

func no() -> Int 
{ 
    print("No") 
    return 0 
} 
} 

son son beau travail e, j'espère que cela fonctionnera pour vous aussi :) :)