【发布时间】:2015-11-01 02:46:08
【问题描述】:
所以现在我一直试图解决这个问题,但没有运气。我想做的事情是这样的......
- 操作表弹出,点击选项会弹出一个警告框
- 警告框中的文本字段要求命名牌组
- 输入姓名,点击“确定”,segue 将用户带到下一个屏幕。
- 如果文本字段为空,则弹出另一个警告框,告诉用户输入有效名称。
现在我想检查警告框中的文本字段是否为空,所以我所做的是在我的 showAlertTapped 函数中添加了一个检查变量,以检查文本字段是否为空。使用 if 语句来继续或弹出第二个警报框。我的问题是弹出第二个警报框,要求输入有效名称,无论文本字段是否为空。我尝试更改一些东西,例如初始 bool 检查变量以及将 textField.text == "" 切换为 textField.text == nil,但所做的只是两次都没有显示警报框。我尝试过的其他一些事情让我忘记了,但最终结果总是一样的,要么两次都进行,要么两次都出现第二个警报框。所以我被困住了。我将发布代码以便更容易查看我是否完全遗漏了某些内容,如果我的格式不适合这篇文章,或者我的代码没有应有的整洁,我提前道歉。我还是个初学者,边走边学。因此,如果我有一些草率或格式错误的东西,我愿意修复它。感谢您的时间。
func showAlertTapped() {
var check = true
//Create the AlertController
let firstAlert: UIAlertController = UIAlertController(title: "New questions deck", message: "Enter a name for your questions deck", preferredStyle: .Alert)
//Create and add the Cancel action
let cancelAction: UIAlertAction = UIAlertAction(title: "Cancel", style: .Cancel) { action -> Void in
}
firstAlert.addAction(cancelAction)
let saveAction: UIAlertAction = UIAlertAction(title: "Save", style: .Default) { action -> Void in
if check == true {
self.shouldPerformSegueWithIdentifier("saveSegue",sender: self)
}
else{
let alert: UIAlertController = UIAlertController(title: nil, message: "Please enter a valid name", preferredStyle: .Alert)
alert.addAction(UIAlertAction(title: "OK", style: .Default, handler: { (action) -> Void in
self.dismissViewControllerAnimated(true, completion: nil)
}))
//Present the AlertController
self.presentViewController(alert, animated: true, completion: nil)
}
}
firstAlert.addAction(saveAction)
//Add a text field
firstAlert.addTextFieldWithConfigurationHandler { textField -> Void in
if textField.text == "" {
check = false
}
textField.textColor = UIColor.blueColor()
}
//Present the AlertController
self.presentViewController(firstAlert, animated: true, completion: nil)
}
【问题讨论】:
-
而不是回答您的问题,我将建议您更改 UI 流程 - 弹出模式警报很烦人 - 用户必须点击以确认它,然后因为您无法阻止 UIAlertController从被解雇后,它将不得不重新显示。虽然工作量更大,但您应该创建自己的视图控制器来管理收集名称的模式对话框;这使您可以更好地控制用户体验,您可以简单地禁用“确定”按钮,直到文本字段具有使用文本字段委托的内容
标签: ios swift uialertcontroller