UIAlertControllerからのテキストフィールド値の取得に問題があります。私は値を取得していますが、間違った順序でコードを実行しているようです。以下の関数では、関数呼び出しが文字列を返すと期待していますが、関数が返った時点で値が設定されていません。アラートボックスからのテキスト値の取得
@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
}
誰かが私の質問を理解することに問題がある場合は、コメントしてください、私は説明するために全力を尽くします。
これは私にも同じ問題をもたらします。 sessionNameは、値が割り当てられる前に出力されます。 – JunkJovis
はい、クリックする前にセッション値を印刷します。 addActionから関数を呼び出してそこで作業を行うことができます。 – Sahil
であるか、testDemoで直接値を渡すことができるので、クラス内でvarを作る必要はありません。 UITextFieldとしてtextField = alert.textFields![0]を使用します。 print( "テキストフィールド:\" (textField.text)」) self.testDemo(textField.text) })) またはtestDemo でこれを取得することができますFUNC testDemo(sessionNameの:!助けのための文字列){} – Sahil