基本上,我正在尝试开发一个包含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!
}
}
注意:代码将执行,构建将成功,但标签不会自动更新。
答案 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。