2014-06-17 14 views
7

Chcę dodać akcję do przycisku Spróbuj ponownie, ale gdy użytkownik naciśnie przycisk Spróbuj ponownie, nic się nie dzieje.Jak dodać akcję do UIAlertView w 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() 

Funkcja określania indeksu naciśniętego przycisku?

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

    switch buttonIndex{ 

    case 1: 
     createAccount() 

    default: 
     //Some code here.. 

    } 
} 
+0

Jak próbowałeś debugowania to? Czy umieściłeś punkt przerwania wewnątrz funkcji, aby sprawdzić, czy wystrzeliwuje? Czy umieściłeś instrukcję logu, aby zobaczyć czym jest 'buttonIndex'? To są pierwsze rzeczy, które muszę zrobić, aby zreplikować błąd, który masz. – wjl

Odpowiedz

22

testowałem swój kod i to działa dobrze dla mnie wypisuje odpowiedni wynik:

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.. 

    } 
} 

Zostanie wydrukowany odrzucony po kliknięciu przycisku odrzucania.

+0

Dla tych, którzy mogą mieć problem: to nie działa, jeśli użyjesz "var createAccountErrorAlert = UIAlertView()" – kommradHomer

0

To dlatego, że indeks swojego przycisku ponawiania wynosi 1, a nie 0. przycisk odwołać ma indeks 0.

Jeśli umieścisz poniższy kod na placu zabaw, można rzeczywiście zobaczyć indeksy przyciski (zgodnie z dokumentacją metody 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

Nie działa z indeksem 1. –

+0

Dzieje się tak, gdy próbuję twojego kodu. Czy możesz również wysłać kod w ramach metody createAccount()? Lub po prostu spróbuj tego, co zasugerował @wjl, umieść punkt przerwania w metodzie delegata i sprawdź wartość indeksu. Lub umieść "println (buttonIndex)" w metodzie delegatów i zobacz, co jest drukowane na konsoli po naciśnięciu przycisku ponów. –

0

Indeks jest nieprawidłowy. Poniższe (oparte na domyślnym szablonie aplikacji dla pojedynczego widoku iOS) działa dla mnie (gdzie podłączyłem przycisk, aby wywołać @IBAction buttonPressed). Nie zapomnij, aby kontroler Zobacz UIAlertViewDelegate (choć następujące prace bez robią tak):

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

Herezje sposób to zrobiłem, z krótszymi liniami kodu:

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?") 
    } 
} 
Powiązane problemy