在文本字段中以用户类型更新输出

时间:2018-06-21 05:17:24

标签: ios swift uitextfield

我有将四个文本字段加起来并在标签中输出总计的代码。当前,代码在完成编辑后即对字段进行求和,即选择另一个文本字段。有没有一种方法可以在用户输入时汇总文本字段?

@IBAction func TankFuelChanged(_ sender: Any) {
    let leftMainTankQuantityValue = Int(leftMainTankQuantity.text ?? "") ?? 0
    let rightMainTankQuantityValue = Int(rightMainTankQuantity.text ?? "") ?? 0
    let auxTankQuantityValue = Int(auxTankQuantity.text ?? "") ?? 0
    let tailTankQuantityValue = Int(tailTankQuantity.text ?? "") ?? 0

    let total = leftMainTankQuantityValue + rightMainTankQuantityValue + auxTankQuantityValue + tailTankQuantityValue

    totalFuelLoad.text = "\(total)"

1 个答案:

答案 0 :(得分:0)

您要查找的是文本字段更改时触发的事件。您可以从情节提要中拖动动作,也可以使用addTarget来编程添加它们,类似于UIButton,但需要使用事件editingChanged。检查以下代码:

var allTextFields: [UITextField] {
    return [leftMainTankQuantity, rightMainTankQuantity, auxTankQuantity, tailTankQuantity]
}

override func viewDidLoad() {
    super.viewDidLoad()

    allTextFields.forEach { $0.addTarget(self, action: #selector(onTextFieldChange), for: .editingChanged) }
}

@objc private func onTextFieldChange() {
    updateResult()
}

private func updateResult() {
    let strings: [String] = allTextFields.compactMap { $0.text } // Will remove all nil texts
    let integers: [Int] = strings.compactMap { Int($0) } // Will remove all non-integer texts
    let sum = integers.reduce(0, { $0 + $1 }) // Will compute a sum
    print(sum) // TODO: update your result here
}

必须将方法标记为@objc,因为其旁边的#selector希望代码能说明一切。