我的iOS待办事项应用程序中有两个文本框,一个用于任务名称,另一个用于描述。当用户将一个或两个文本框留空时,我想提醒用户该问题并循环,直到两个文本框不再为空。这是我的代码:
var validInput :Bool = false //for while
while (validInput == false) {
if (txtTask.text == "" || txtDesc.text == "") {
var alert = UIAlertController(title: "Error", message: "Task and description cannot be blank", preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "Working!!", style: UIAlertActionStyle.Default, handler: nil))
self.presentViewController(alert, animated: true, completion: nil)
} else {
validInput == true
}
}
此代码位于@IBAction
函数内,该函数在用户按下Done
时运行。我的代码在无限循环中运行,这是非常明显的原因。我怎样才能达到我想要的目标?
我有个主意:
Done
时再次运行该功能。我怎么能a)将上述内容放入代码中,或者b)使用上面的循环,正确吗?
答案 0 :(得分:1)
答案是:不要这样做!
您无需循环textFields来监视值更改。正确的方法是使用UITextField的委托方法,如
- textFieldDidBeginEditing:
知道用户何时开始编辑,
- textField:shouldChangeCharactersInRange:replacementString:
- textFieldDidEndEditing:
知道用户何时结束编辑
等...
正如文档中所述:
https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITextFieldDelegate_Protocol/
在这种情况下,使用循环来执行此类操作是一种不好的做法。 (并且你必须做很多事情才能阻止当前线程,验证屏幕上是否已经有警报等)
答案 1 :(得分:0)
如果你在"完成"中使用while
循环按钮,它会像你说的那样陷入无限循环。由于这个原因,用户没有机会改变任何东西
相反,您应该使用if
语句检查这些框是否为空,如果是,则给它们发出警告,并且什么都不做。
if condition {
// Execute your code if both boxes are filled
} else {
// Show alert
}
如果您坚持使用while循环,则必须让用户在警报中输入文本。那么你的代码就可以了。
答案 2 :(得分:0)
这里不需要while循环。只需在if else循环中执行,因为每次在归档文本后按Done
按钮或留空时,您的代码都将被执行。
if (txtTask.text == "" || txtDesc.text == "") {
var alert = UIAlertController(title: "Error", message: "Task and description cannot be blank", preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "Working!!", style: UIAlertActionStyle.Default, handler: nil))
self.presentViewController(alert, animated: true, completion: nil)
} else {
//Do something or print.
}
我假设这段代码在@IBAction
方法中。
答案 3 :(得分:0)
保持简单:
git