我试图使用插座集合将所有文本字段的总数相加,因此问题以编程方式放置在所有文本字段中,因此我无法将其拖放到集合中。如何以编程方式执行此操作?您可以看到我正在尝试执行的操作,但这正在导致编译错误。
var a28 = UITextField()
var a29 = UITextField()
@objc func hitA31(_ textField: UITextField) {
var fullTotal = 0
for view in a28,a29 {
if let text = view.text, let num = Int(text) {
fullTotal += num
}
}
a31.text = String(fullTotal)
}
答案 0 :(得分:0)
您可以像这样遍历所有子视图:
func hitA31() {
var fullTotal = 0
for case let textField as UITextField in view.subviews {
// You can add validation if the textField is only for a28 and a29
if let text = textField.text, let num = Int(text) {
fullTotal += num
}
}
a31.text = String(fullTotal)
}
答案 1 :(得分:0)
IBOutlet
集合只是一个数组。没什么特别的。
let textFields = [a28, a29]
for view in textFields {
}
或
let fullTotal = [a28, a29]
.compactMap { Int($0.text ?? "") }
.reduce(0, +)
答案 2 :(得分:-1)
lazy var textFileds : [UITextField] = {
var temptextField: [UITextField] = []
for v:AnyObject in self.view.subviews {
if v is UITextField {
temptextField.append(v as! UITextField)
}
}
return temptextField
}()
...
基本上,它遍历所有子视图并检查是否一个UITextField。在这种情况下,它将被添加到一个临时数组中。然后,该临时数组用于延迟实例化textFileds数组。
当您可以像这样添加总数时,这就是您所有的textFileds
func getFullNumber () {
var fullNumber = 0
for txtfield in textFileds {
let txtString = txtfield.text ?? ""
let number = Int(txtString) ?? 0
fullNumber += number
}
a31.text = String(fullNumber)
}