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

问题描述 投票:0回答:2

基本上,我正在尝试开发一个有3个标签的应用程序,2个可编辑,1个不是。 2个可编辑的文本是公式中的参数,当其中一个更新时,不可编辑的标签应自动更新(将其视为y = a + b,如果a更新,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!
}

}

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

ios swift uilabel textfield
2个回答
1
投票

你过早地尝试计算了。您已经被问到该字段是否应该更改,并且您在响应允许之前调用了一种使用现有值的方法。

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


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。

© www.soinside.com 2019 - 2024. All rights reserved.