从UIAlertController访问input
我有一个UIAlertController,当用户在TouchID屏幕上select“input密码”的时候会提示用户。 如何在屏幕上显示后恢复用户的input?
let passwordPrompt = UIAlertController(title: "Enter Password", message: "You have selected to enter your passwod.", preferredStyle: UIAlertControllerStyle.Alert) passwordPrompt.addAction(UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Default, handler: nil)) passwordPrompt.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil)) passwordPrompt.addTextFieldWithConfigurationHandler({(textField: UITextField!) in textField.placeholder = "Password" textField.secureTextEntry = true }) presentViewController(passwordPrompt, animated: true, completion: nil)
我知道确定button应该可能有一个处理程序,但现在这个代码并没有真正做任何事情,但我想通过println显示文本字段的输出。 这真的只是一个testing应用程序,我学习Swift和一些新的API的东西。
我知道评论已经发布回答这个问题,但答案应该使解决scheme明确。
@IBOutlet var newWordField: UITextField func wordEntered(alert: UIAlertAction!){ // store the new word self.textView2.text = deletedString + " " + self.newWordField.text } func addTextField(textField: UITextField!){ // add the text field and make the result global textField.placeholder = "Definition" self.newWordField = textField } // display an alert let newWordPrompt = UIAlertController(title: "Enter definition", message: "Trainging the machine!", preferredStyle: UIAlertControllerStyle.Alert) newWordPrompt.addTextFieldWithConfigurationHandler(addTextField) newWordPrompt.addAction(UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Default, handler: nil)) newWordPrompt.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: wordEntered)) presentViewController(newWordPrompt, animated: true, completion: nil)
这会显示带有文本字段和两个操作button的提示。 它完成后读取文本字段。
我写了一篇博客文章,探索新的API。 你可以在闭包中捕获一个局部variables,你很好走。
var inputTextField: UITextField? let passwordPrompt = UIAlertController(title: "Enter Password", message: "You have selected to enter your password.", preferredStyle: UIAlertControllerStyle.Alert) passwordPrompt.addAction(UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Default, handler: nil)) passwordPrompt.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: { (action) -> Void in // Now do whatever you want with inputTextField (remember to unwrap the optional) })) passwordPrompt.addTextFieldWithConfigurationHandler({(textField: UITextField!) in textField.placeholder = "Password" textField.secureTextEntry = true inputTextField = textField }) presentViewController(passwordPrompt, animated: true, completion: nil)
这样你可以避免在你的视图控制器上有一个不必要的属性。
我把Ash Furrow的答案移植到了Swift 3。
var inputTextField: UITextField? let passwordPrompt = UIAlertController(title: "Enter Password", message: "You have selected to enter your password.", preferredStyle: UIAlertControllerStyle.alert) passwordPrompt.addAction(UIAlertAction(title: "Cancel", style: UIAlertActionStyle.default, handler: nil)) passwordPrompt.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: { (action) -> Void in // Now do whatever you want with inputTextField (remember to unwrap the optional) })) passwordPrompt.addTextField(configurationHandler: {(textField: UITextField!) in textField.placeholder = "Password" textField.isSecureTextEntry = true inputTextField = textField }) present(passwordPrompt, animated: true, completion: nil)
在你的closures中做这个:
let tf = alert.textFields[0] as UITextField
这是一个要点