Ich habe Probleme, einen Textfeldwert von einem UIAlertController zu erhalten. Ich bekomme den Wert, aber es scheint, meinen Code in der falschen Reihenfolge auszuführen. In der Funktion unten erwarte ich, dass der Funktionsaufruf eine Zeichenfolge zurückgibt, aber der Wert wird nicht zum Zeitpunkt der Rückgabe der Funktion festgelegt.Abrufen von Textwert aus der Alarmbox
@IBAction func btnSaveSession(sender: AnyObject) {
//Prompt user to enter session name
var sessionName: String = ""
sessionName = promptUserToEnterSessionName("Save Session", message: "Please enter the name of your custom session below.");
print("session Name: " + sessionName)
//Save session to firebase.
//redirect to create session controller.
}
func promptUserToEnterSessionName(title: String, message: String) -> String{
var sessionName: String = ""
//1. Create the alert controller.
let alert = UIAlertController(title: title, message: message, preferredStyle: .Alert)
//2. Add the text field. You can configure it however you need.
alert.addTextFieldWithConfigurationHandler({ (textField) -> Void in
textField.text = "Enter session name."
})
//3. Grab the value from the text field, and print it when the user clicks OK.
alert.addAction(UIAlertAction(title: "OK", style: .Default, handler: { (action) -> Void in
let textField = alert.textFields![0] as UITextField
print("Text field: \(textField.text)")
sessionName = textField.text!
}))
// 4. Present the alert.
self.presentViewController(alert, animated: true, completion: nil)
return sessionName
}
Wenn jemand Probleme hat, meine Frage zu verstehen, bitte Kommentar und ich werde mein Bestes tun, um zu erklären.
Dies gibt mir immer noch das gleiche Problem. sessionName wird gedruckt, bevor der Wert zugewiesen wird. – JunkJovis
Ja, es wird Sitzungswert vor dem Klicken gedruckt. Sie können die Funktion von addAction aufrufen und dort arbeiten. – Sahil
oder Sie können direkten Wert in testDemo übergeben, so dass Sie nicht Var in der Klasse machen müssen. Für zB alert.addAction (UIAlertAction (titel: "OK", style: .Default, handler: {(aktion) -> Void in lasst textField = alert.textFields! [0] als UITextField print ("Textfeld: \ (TextField.text) ") self.testDemo (TextField.text) })) oder kann diese erhalten in TestDemo func testDemo (session: String) { } – Sahil