如何清除 Swift 中的 UITextFields?
How to clear UITextFields in Swift?
我以编程方式创建了多个文本字段。正在阅读他们的输入,并在检查答案后向用户提出一个新问题。
但我似乎无法清除文本字段,之前的输入仍然存在。
我已经尝试添加 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
}
问题出在这一行:
let myTekstveld = UITextField()
这会创建一个新的局部变量 myTekstveld
,它只存在于当前作用域中。 (通常是包含代码的最里面的一组大括号。)您正在创建一个文本字段,将其添加到您的视图层次结构中,然后立即忘记它。
您可能也有一个实例变量 myTekstveld
,但您没有设置它。该实例变量可能包含不同的文本字段。
从您的代码中删除单词 let
,它会将您新创建的文本字段保存到您的实例变量中
在 myTekstveld = UITextField()
行上方添加一个新行,上面写着:
print("myTekstveld = \(myTekstveld)")
并查看它向调试控制台显示的内容。
如果它记录一个文本字段,您可能应该完全删除 myTekstveld = UITextField()
行,只配置现有的文本字段,而不是用新的文本字段替换文本字段。
您必须找到带标签的 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 = ""
}
}
检查这个:
textfield.text = nil
我以编程方式创建了多个文本字段。正在阅读他们的输入,并在检查答案后向用户提出一个新问题。
但我似乎无法清除文本字段,之前的输入仍然存在。
我已经尝试添加 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
}
问题出在这一行:
let myTekstveld = UITextField()
这会创建一个新的局部变量 myTekstveld
,它只存在于当前作用域中。 (通常是包含代码的最里面的一组大括号。)您正在创建一个文本字段,将其添加到您的视图层次结构中,然后立即忘记它。
您可能也有一个实例变量 myTekstveld
,但您没有设置它。该实例变量可能包含不同的文本字段。
从您的代码中删除单词 let
,它会将您新创建的文本字段保存到您的实例变量中
在 myTekstveld = UITextField()
行上方添加一个新行,上面写着:
print("myTekstveld = \(myTekstveld)")
并查看它向调试控制台显示的内容。
如果它记录一个文本字段,您可能应该完全删除 myTekstveld = UITextField()
行,只配置现有的文本字段,而不是用新的文本字段替换文本字段。
您必须找到带标签的 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 = ""
}
}
检查这个:
textfield.text = nil