2014-06-17 18 views
7

Desidero aggiungere un'azione al pulsante Riprova, ma quando l'utente preme il pulsante Riprova non accade nulla.Come aggiungere un'azione a UIAlertView in Swift (iOS 7)

var createAccountErrorAlert: UIAlertView = UIAlertView() 

createAccountErrorAlert.delegate = self     

createAccountErrorAlert.title = "Oops" 
createAccountErrorAlert.message = "Could not create account!" 
createAccountErrorAlert.addButtonWithTitle("Dismiss") 
createAccountErrorAlert.addButtonWithTitle("Retry") 

createAccountErrorAlert.show() 

Funzione per determinare l'indice del pulsante premuto?

func alertView(View: UIAlertView!, clickedButtonAtIndex buttonIndex: Int){ 

    switch buttonIndex{ 

    case 1: 
     createAccount() 

    default: 
     //Some code here.. 

    } 
} 
+0

Come ti sei trovato a eseguire il debug di questo? Hai inserito un punto di interruzione all'interno della funzione per vedere se si attiva? Hai messo un'istruzione di registro per vedere cosa 'buttonIndex' è? Queste sono le prime cose che dovrei fare per replicare l'errore che stai riscontrando. – wjl

risposta

22

ho provato il codice e si sta lavorando bene per me è stampa il rispettivo risultato:

func showAlert(){ 
    var createAccountErrorAlert: UIAlertView = UIAlertView() 

    createAccountErrorAlert.delegate = self 

    createAccountErrorAlert.title = "Oops" 
    createAccountErrorAlert.message = "Could not create account!" 
    createAccountErrorAlert.addButtonWithTitle("Dismiss") 
    createAccountErrorAlert.addButtonWithTitle("Retry") 

    createAccountErrorAlert.show() 
} 

func alertView(View: UIAlertView!, clickedButtonAtIndex buttonIndex: Int){ 

    switch buttonIndex{ 

    case 1: 
     NSLog("Retry"); 
    break; 
    case 0: 
     NSLog("Dismiss"); 
     break; 
    default: 
     NSLog("Default"); 
     break; 
     //Some code here.. 

    } 
} 

Stampa ignorare quando faccio clic sul pulsante congedo.

+0

Per coloro che potrebbero avere un problema: non funziona se si utilizza "var createAccountErrorAlert = UIAlertView()" – kommradHomer

0

Questo perché l'indice del pulsante di tentativi è 1, non è 0. Il pulsante respingere ha indice 0.

Se si inserisce il seguente codice in un parco giochi, potrete effettivamente vedere gli indici del pulsanti (come documentato sul metodo addButtonWithTitle):

var createAccountErrorAlert: UIAlertView = UIAlertView() 
createAccountErrorAlert.title = "Oops" 
createAccountErrorAlert.message = "Could not create account!" 
createAccountErrorAlert.addButtonWithTitle("Dismiss") //Prints 0 
createAccountErrorAlert.addButtonWithTitle("Retry") //Prints 1 
+0

Non funziona con un indice di 1. –

+0

Lo fa quando provo il codice. Potresti anche inviare il codice all'interno del tuo metodo createAccount()? Oppure prova solo cosa suggerito da @wjl, posizionando un punto di interruzione nel metodo delegate e controllando il valore dell'indice. Oppure metti un "println (buttonIndex)" nel metodo delegate e vedi cosa viene stampato sulla console quando premi il pulsante Riprova. –

0

Index è sbagliato. Il seguente (basato sul modello di app di default per iOS vista singola) funziona per me (dove ho collegato un pulsante per attivare @IBAction buttonPressed). Non dimenticate di fare il vostro controller di vista un UIAlertViewDelegate (anche se i seguenti lavori senza farlo):

import UIKit 

class ViewController: UIViewController, UIAlertViewDelegate { 

    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 buttonPressed(sender : AnyObject) { 
     var createAccountErrorAlert: UIAlertView = UIAlertView() 

     createAccountErrorAlert.delegate = self 

     createAccountErrorAlert.title = "Oops" 
     createAccountErrorAlert.message = "Could not create account!" 
     createAccountErrorAlert.addButtonWithTitle("Dismiss") 
     createAccountErrorAlert.addButtonWithTitle("Retry") 

     createAccountErrorAlert.show() 
    } 

    func alertView(View: UIAlertView!, clickedButtonAtIndex buttonIndex: Int) { 

     switch buttonIndex { 

     default: 
      println("alertView \(buttonIndex) clicked") 

     } 
    } 
} 
0

Heres il modo in cui l'ho fatto, con linee più corte di codice:

func showAlert(){ 
    var alert = UIAlertView(title: "Choose", message: "Which_pill", delegate: self, cancelButtonTitle:"Red") 
    alert.addButtonWithTitle("Blue") 
    alert.show() 
} 

func alertView(View: UIAlertView!, clickedButtonAtIndex buttonIndex: Int){ 
    switch buttonIndex{ 
    case 1: println("Blue") 
    case 0: println("Red") 
    default: println("Is this part even possible?") 
    } 
} 
Problemi correlati