2016-08-09 8 views
0

Ich verwende SCLAlertView Framework als meine Alert View. https://github.com/vikmeup/SCLAlertView-SwiftSwift erhalten Nullwert in Alertview Textfeld

Ich erstelle eine Alertview mit Textfeld. Hier ist der Code.

let emailSubmit: UITextField = UITextField() 
let passwordSubmit: UITextField = UITextField() 
var email: String? 
var password: String? 

//This function call when loginbutton tapped 
func showLogin(){ 

    let alertView = SCLAlertView() 

    let emailSubmit = alertView.addTextField("Enter your Email") 
    let passwordSubmit = alertView.addTextField("Password") 

    email = emailSubmit.text 
    password = passwordSubmit.text 
    passwordSubmit.secureTextEntry = true 

    alertView.addButton("Confirm", target:self, selector:#selector(ViewController.submitLogin)) 

    alertView.showTitle(
     "Login", 
     subTitle: "", 
     duration: nil, 
     completeText: "Cancel", 
     style: .Info) 
    } 

Ich musste eine Funktion für die Schaltfläche hinzufügen. Der Funktionsname lautet submitLogin. Es verwendet, um das Login-Detail (textfield.text) an den Back-End-Server zu senden. Es ist jedoch nur Nullwert zurückgeben, nachdem ich den Absenden-Button klicken Es ist die Login-Button Funktion einreichen

func submitLogin(){ 
let email = emailSubmit.text! 
let password = passwordSubmit.text! 

print("\(email),\(password)") 
} 

Es ist jedoch gleich Null an, wenn ich den Absenden-Button klicken Kann jemand darauf hinweisen, was mit dem Code falsch ?

Antwort

1

vorgeschlagen wird der Code sollte wie folgt sein:

var email: String? 
var password: String? 

//This function call when loginbutton tapped 
@IBAction func showLogin(){ 

    let alertView = SCLAlertView() 

    let emailSubmit = alertView.addTextField("Enter your Email") 
    let passwordSubmit = alertView.addTextField("Password") 

    passwordSubmit.secureTextEntry = true 

    alertView.addButton("Confirm") { 
     self.email = emailSubmit.text 
     self.password = passwordSubmit.text 

     self.submitLogin() 
    } 

    alertView.showTitle(
     "Login", 
     subTitle: "", 
     duration: nil, 
     completeText: "Cancel", 
     style: .Info) 
} 

func submitLogin(){ 
    print("\(email),\(password)") 
} 

Erläuterung:

In Ihrem Code die Zeile password = passwordSubmit.text ist Setzen Sie den Wert var password auf nil, bevor der Benutzer die Bestätigungstaste drückt, gleiches mit var email.

Und es ist nicht notwendig, E-Mail und Passwort Textfelder zu definieren, da Alertview Textfelder in sich selbst erstellen wird.

+1

omg ... Ich sollte den Sektor nicht erstellen, um die Funktion aufzurufen. Es wird komplizierter. Danke Kumpel! Nun Erklärung! –

2

Ich denke, es gibt zwei verschiedene emailSubmit und passwordSubmit Variablen in Ihrem Code vorhanden. Die außerhalb der Funktion showLogin ist die, die Sie in submitLogin Methode verwenden, aber diese Felder werden ohne Wert in den Zeilen 1 und 2 initialisiert. Es ist eine andere Instanz initialisiert und hinzugefügt SCLAlertView innerhalb der showLogin Methode und angezeigt, aber ihr Wert ist sonst nicht benutzt.

Sie sollten wahrscheinlich blocks wie verwenden, wie es in der sample code

+0

oh ja! Ich sollte Block verwenden !! –