从Swift中的文本框循环用户输入

时间:2015-05-11 03:11:31

标签: ios swift while-loop textbox

我的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时运行。我的代码在无限循环中运行,这是非常明显的原因。我怎样才能达到我想要的目标?

我有个主意:

  1. 用户将文本框留空并按完成。
  2. 警告弹出警告用户。
  3. 跳过功能的其余部分,仅在按下Done时再次运行该功能。
  4. 我怎么能a)将上述内容放入代码中,或者b)使用上面的循环,正确吗?

4 个答案:

答案 0 :(得分:1)

答案是:不要这样做!

您无需循环textFields来监视值更改。正确的方法是使用UITextField的委托方法,如

- textFieldDidBeginEditing:知道用户何时开始编辑,

textField文本值更改时

- 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