如何在Swift中清除UITextFields?

时间:2018-09-30 14:30:26

标签: ios swift uitextfield uitextfielddelegate

我以编程方式创建了多个文本字段。正在读取他们的输入,并且在检查了答案之后,正在向用户提出新问题。 但是我似乎无法清除文本字段,以前的输入仍然存在。 我已经尝试添加textfield.text = "",但似乎不起作用。也许我应该以某种方式删除带有正确标签的文本字段,但是我不知道该怎么做。有人对此情况有建议吗?

var a = 0
while a < aantalNoten {
    let myTekstveld = UITextField()
    if (view.viewWithTag(a+1) as? UITextField) != nil {
        myTekstveld.text = ""
        }
        else {
            myTekstveld.frame = CGRect(x: labelX, y: labelY + 100, width: labelWidth, height: labelHeight / 2)
            myTekstveld.backgroundColor = UIColor.white
            myTekstveld.textAlignment = .center
            myTekstveld.placeholder = "?"
            myTekstveld.keyboardType = UIKeyboardType.default
            myTekstveld.borderStyle = UITextField.BorderStyle.line
            myTekstveld.autocorrectionType = .no
            myTekstveld.returnKeyType = UIReturnKeyType.done
            myTekstveld.clearButtonMode = UITextField.ViewMode.whileEditing
            myTekstveld.textColor = UIColor.init(displayP3Red: CGFloat(96.0/255.0), green: CGFloat(35.0/255.0), blue: CGFloat(123.0/255.0), alpha: 1)
            myTekstveld.delegate = self as? UITextFieldDelegate
            myTekstveld.tag = a + 1
            view.addSubview(myTekstveld)
        }
        a += 1
        labelX += labelWidth
    }

3 个答案:

答案 0 :(得分:2)

您必须找到带有标签的textfield。这里view是超级视图。遍历所有子视图并找到您的textField

for view in self.view.subviews {
   //Get One By One with Tag
   if let txtField1 = self.view.viewWithTag(tagOfTextField) as? UITextField {
       txtField1.text = ""
   }
}

或者您可以清除所有textfields

for view in self.view.subviews {
    //Get All Values
    if let textField = view as? UITextField {
        textField.text = ""
    }
}

答案 1 :(得分:1)

问题是这一行:

let myTekstveld = UITextField()

这将创建一个仅在当前作用域中存在的新局部变量myTekstveld。 (通常,最里面的花括号将代码括起来。)您正在创建一个文本字段,将其添加到视图层次结构中,然后立即将其忽略。

您可能也有一个实例变量myTekstveld,但是您没有设置它。该实例变量可能包含一个不同的文本字段。

从代码中删除单词let,它将新创建的文本字段保存到实例变量

在您的myTekstveld = UITextField()行上方添加新行,内容为:

print("myTekstveld = \(myTekstveld)") 

并查看其在调试控制台中显示的内容。

如果它记录了一个文本字段,您可能应该完全摆脱myTekstveld = UITextField()行,而只需配置现有的文本字段,而不是用一个新的文本字段来代替。

答案 2 :(得分:-2)

检查此:

  textfield.text = nil