Swift - 强制用户在 UIAlertController 中输入(即不是空白输入)
Swift - Force a user to enter input (i.e. not blank input) in a UIAlertController
我想在我的某个应用程序中查询用户的姓名。我想进行检查以确保用户输入了非空字符串,然后在输入无效时用错误消息重新提示用户。到目前为止,这就是我所拥有的:
while name == "" {
name = promptUserForName()
}
promptUserForName( ) 方法是这样的:
private func promptUserForName() -> String {
let alert = UIAlertController(title: "Enter your name:", message: nil, preferredStyle: .Alert)
// Presents a keyboard for user to enter name
var userInputField: UITextField?
alert.addTextFieldWithConfigurationHandler { (textField: UITextField!) in
userInputField = textField
}
var name: String = ""
let defaultAction = UIAlertAction(title: "OK", style: .Default, handler: {(action) -> Void in
if let userInfo = userInputField!.text {
name = userInfo
}
})
alert.addAction(defaultAction)
self.presentViewController(alert, animated: true, completion: nil)
return name
}
不幸的是,while 循环只是无限循环而不提示用户并等待响应。有没有办法使这项工作起作用,也许是通过将 while 循环放在 promptUserForName() 方法中?谢谢
不要使用 while 循环。只需检查警报的完成处理程序中的名称是否为空。如果为空,则再次调用promptUserForName
;否则做任何你需要做的事情。你可能不应该 return 这个方法的任何东西,因为它是异步的;相反,从警报的完成处理程序中将名称传递给另一个方法。
我想在我的某个应用程序中查询用户的姓名。我想进行检查以确保用户输入了非空字符串,然后在输入无效时用错误消息重新提示用户。到目前为止,这就是我所拥有的:
while name == "" {
name = promptUserForName()
}
promptUserForName( ) 方法是这样的:
private func promptUserForName() -> String {
let alert = UIAlertController(title: "Enter your name:", message: nil, preferredStyle: .Alert)
// Presents a keyboard for user to enter name
var userInputField: UITextField?
alert.addTextFieldWithConfigurationHandler { (textField: UITextField!) in
userInputField = textField
}
var name: String = ""
let defaultAction = UIAlertAction(title: "OK", style: .Default, handler: {(action) -> Void in
if let userInfo = userInputField!.text {
name = userInfo
}
})
alert.addAction(defaultAction)
self.presentViewController(alert, animated: true, completion: nil)
return name
}
不幸的是,while 循环只是无限循环而不提示用户并等待响应。有没有办法使这项工作起作用,也许是通过将 while 循环放在 promptUserForName() 方法中?谢谢
不要使用 while 循环。只需检查警报的完成处理程序中的名称是否为空。如果为空,则再次调用promptUserForName
;否则做任何你需要做的事情。你可能不应该 return 这个方法的任何东西,因为它是异步的;相反,从警报的完成处理程序中将名称传递给另一个方法。