ユーザーがTouchID画面で「パスワードを入力」を選択すると、ユーザーにプロンプトが表示されるUIAlertControllerがあります。これを画面に表示した後、ユーザーの入力を回復するにはどうすればよいですか?
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)
OKボタンにはおそらくハンドラーがあるはずですが、現時点ではこのコードは実際には何もしませんが、printlnを介してテキストフィールドの出力を表示したいと思います。これは、実際にSwiftおよびいくつかの新しいAPIのものを学ぶためのテストアプリです。
質問に答えるためにコメントが投稿されたことは知っていますが、答えは解決策を明確にする必要があります。
@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)
これにより、テキストフィールドと2つのアクションボタンを含むプロンプトが表示されます。完了すると、テキストフィールドを読み取ります。
ブログ投稿 新しいAPIの探索を書きました。クロージャーでローカル変数をキャプチャするだけで、準備完了です。
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)
そうすれば、View Controllerに不要なプロパティが含まれることを回避できます。
Ash Furrow's answer to 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)