更新2个文本字段之一时更新UILabel

时间:2017-12-20 19:39:35

标签: ios swift uilabel textfield

基本上,我正在尝试开发一个包含3个标签的应用,2个可编辑的& 1不是。 2个可编辑文本是公式中的参数,当其中一个更新时,不可编辑的标签应自动更新(将其视为y = a + b,如果更新,则应自动更新y)。

我的问题是,虽然我为上面的y公式制定了一个函数,但我似乎无法自动更新。我使用了UITextFieldDelegate的函数textField,如下所示:

class ViewController: UIViewController, UITextFieldDelegate {

@IBOutlet weak var weight: UITextField!
@IBOutlet weak var length: UITextField!
@IBOutlet weak var bmi: UILabel!
@IBOutlet weak var bmiCategory: UILabel!
@IBOutlet weak var textField1: UILabel!
@IBOutlet weak var textField2: UILabel!

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    bmi.text = String(bmiCalculator())
    return true
}

func bmiCalculator() -> Float {

    let weightValue: Float
    let lengthValue: Float
    let bmiValue: Float
    weightValue = (weight.text! as NSString).floatValue
    lengthValue = (length.text! as NSString).floatValue
    bmiValue = Float(formatFloat(value: weightValue / (lengthValue * lengthValue)))!
    print(bmiValue)
    return bmiValue

}

func formatFloat(value: Float) -> String {
    let formatter = NumberFormatter()
    formatter.maximumFractionDigits = 1
    let result = formatter.string(from: value as NSNumber)
    return result!
}

}

注意:代码将执行,构建将成功,但标签不会自动更新。

2 个答案:

答案 0 :(得分:1)

您过早尝试计算。您已经被问及字段是否应该更改,并且您在回复允许之前调用方法来使用现有值。

我建议处理UITextFieldTextDidChange通知并在那里更新您的相关标签。

答案 1 :(得分:0)

以不同的方式找到答案:我定义了" a" &安培; " B"作为IBOutlets和IBActions,IBAction将执行一个函数,该函数将在文本字段中更新时调用函数bmiCalculator()。见下文:

@IBAction func weightFieldUpdate(_ textField: UITextField) {
    bmi.text = String(bmiCalculator())
}
@IBAction func lengthFieldUpdate(_ textField: UITextField) {
    bmi.text = String(bmiCalculator())
}

编辑:我还发现,由于执行相同的代码,因此只能使用1个IBAction完成此功能

@IBAction func weightAndLengthUpdate(_ textField: UITextField) {
    bmi.text = String(bmiCalculator())
}

所需要的只是将两个UITextField链接到此IBAction。