textFieldDidEndEditing 中的函数是 运行ning 而它不应该 运行
Function in textFieldDidEndEditing is running when it’s not supposed to run
我有 5 个文本字段:
当我在任意 4 个文本字段中键入值时,应该计算该值并且它应该出现在第 5 个文本字段中。
例如,如果我在“利息”、“每月付款”、“终值”和“付款次数”文本字段中输入值,则应计算出一个值,该值应出现在“本金金额”文本字段中。
计算在关闭键盘时进行 (textFieldDidEndEditing)。
这是相关代码:
// When the user has finished typing
func textFieldDidEndEditing(_ textField: UITextField) {
// Principal Amount
let P = Double(principalAmountTextField.text!)
// Interest rate
let r = Double(interestTextField.text!)
// Monthly Payment
let PMT = Double(monthlyPaymentTextField.text!)
// Number of Payments
let t = Double(numOfPaymentsTextField.text!)
// Future Value
let A = Double(futureValueTextField.text!)
// Check if the necessary text fields are filled to find Principal Amount
if futureValueTextField.text != "" && interestTextField.text != "" && numOfPaymentsTextField.text != "" && monthlyPaymentTextField.text != "" {
print(1)
principalAmountTextField.text = String(calculatePrincipalAmountCompound(futureValue: A!, interestRate: r! / 100, payment: PMT!, numOfPayments: t!))
}
// Check if the necessary text fields are filled to find Monthly Payment
if futureValueTextField.text != "" && principalAmountTextField.text != "" && numOfPaymentsTextField.text != "" && interestTextField.text != "" {
print(2)
monthlyPaymentTextField.text = String(calculateMonthlyPaymentCompound(principalAmount: P!, futureValue: A!, numOfPayments: PMT!, interestRate: r! / 100))
}
}
很明显,如果我在利息、每月付款、未来价值和付款次数文本字段中输入值,只有 textFieldDidEndEditing 方法中的第一个 IF 条件应该 运行,但出于某种原因,第二个 IF 条件 运行s 也是。
我不知道为什么 运行s,如果有人能帮助我,我将不胜感激。
编辑:
多亏了@tomerpacific,我才能够完成这项工作。
但我仍然不知道为什么上面的代码不起作用,我只是尝试 运行 在不调用方法的情况下设置 IF 条件并且它可以正常工作:
// Check if the necessary text fields are filled to find Principal Amount
if futureValueTextField.text != "" && interestTextField.text != "" && numOfPaymentsTextField.text != "" {
print(11)
}
// Check if the necessary text fields are filled to find Monthly Payment
if futureValueTextField.text != "" && principalAmountTextField.text != "" && numOfPaymentsTextField.text != "" && interestTextField.text != "" {
print(22)
}
问题出在你的逻辑上
让我们分解一下,让事情更清楚。
if futureValueTextField.text != "" && interestTextField.text != "" && numOfPaymentsTextField.text != "" && monthlyPaymentTextField.text != "" {
print(1)
principalAmountTextField.text = String(calculatePrincipalAmountCompound(futureValue: A!, interestRate: r! / 100, payment: PMT!, numOfPayments: t!))
}
当此 if 条件为真时,principalAmountTextField 获得一个值。
因此,在此条件之后,以下文本字段具有值:
futureValueTextField
兴趣文本字段
numOfPaymentsTextField
monthlyPaymentTextField
principalAmountTextField
// Check if the necessary text fields are filled to find Monthly Payment
if futureValueTextField.text != "" && principalAmountTextField.text != "" && numOfPaymentsTextField.text != "" && interestTextField.text != "" {
print(2)
monthlyPaymentTextField.text = String(calculateMonthlyPaymentCompound(principalAmount: P!, futureValue: A!, numOfPayments: PMT!, interestRate: r! / 100))
}
现在,由于您没有从 if 子句中 return 或没有 if/else 流程,因此当以下文本字段具有值时,下一个 if 计算结果为真:
- futureValueTextField
- 兴趣文本字段
- numOfPaymentsTextField
- principalAmountTextField
并且由于您已为 principalAmountTextField 提供了一个值,因此满足第二个 if 条件并运行代码。
我有 5 个文本字段:
当我在任意 4 个文本字段中键入值时,应该计算该值并且它应该出现在第 5 个文本字段中。
例如,如果我在“利息”、“每月付款”、“终值”和“付款次数”文本字段中输入值,则应计算出一个值,该值应出现在“本金金额”文本字段中。 计算在关闭键盘时进行 (textFieldDidEndEditing)。
这是相关代码:
// When the user has finished typing
func textFieldDidEndEditing(_ textField: UITextField) {
// Principal Amount
let P = Double(principalAmountTextField.text!)
// Interest rate
let r = Double(interestTextField.text!)
// Monthly Payment
let PMT = Double(monthlyPaymentTextField.text!)
// Number of Payments
let t = Double(numOfPaymentsTextField.text!)
// Future Value
let A = Double(futureValueTextField.text!)
// Check if the necessary text fields are filled to find Principal Amount
if futureValueTextField.text != "" && interestTextField.text != "" && numOfPaymentsTextField.text != "" && monthlyPaymentTextField.text != "" {
print(1)
principalAmountTextField.text = String(calculatePrincipalAmountCompound(futureValue: A!, interestRate: r! / 100, payment: PMT!, numOfPayments: t!))
}
// Check if the necessary text fields are filled to find Monthly Payment
if futureValueTextField.text != "" && principalAmountTextField.text != "" && numOfPaymentsTextField.text != "" && interestTextField.text != "" {
print(2)
monthlyPaymentTextField.text = String(calculateMonthlyPaymentCompound(principalAmount: P!, futureValue: A!, numOfPayments: PMT!, interestRate: r! / 100))
}
}
很明显,如果我在利息、每月付款、未来价值和付款次数文本字段中输入值,只有 textFieldDidEndEditing 方法中的第一个 IF 条件应该 运行,但出于某种原因,第二个 IF 条件 运行s 也是。
我不知道为什么 运行s,如果有人能帮助我,我将不胜感激。
编辑: 多亏了@tomerpacific,我才能够完成这项工作。 但我仍然不知道为什么上面的代码不起作用,我只是尝试 运行 在不调用方法的情况下设置 IF 条件并且它可以正常工作:
// Check if the necessary text fields are filled to find Principal Amount
if futureValueTextField.text != "" && interestTextField.text != "" && numOfPaymentsTextField.text != "" {
print(11)
}
// Check if the necessary text fields are filled to find Monthly Payment
if futureValueTextField.text != "" && principalAmountTextField.text != "" && numOfPaymentsTextField.text != "" && interestTextField.text != "" {
print(22)
}
问题出在你的逻辑上
让我们分解一下,让事情更清楚。
if futureValueTextField.text != "" && interestTextField.text != "" && numOfPaymentsTextField.text != "" && monthlyPaymentTextField.text != "" {
print(1)
principalAmountTextField.text = String(calculatePrincipalAmountCompound(futureValue: A!, interestRate: r! / 100, payment: PMT!, numOfPayments: t!))
}
当此 if 条件为真时,principalAmountTextField 获得一个值。
因此,在此条件之后,以下文本字段具有值:
futureValueTextField
兴趣文本字段
numOfPaymentsTextField
monthlyPaymentTextField
principalAmountTextField
// Check if the necessary text fields are filled to find Monthly Payment if futureValueTextField.text != "" && principalAmountTextField.text != "" && numOfPaymentsTextField.text != "" && interestTextField.text != "" { print(2) monthlyPaymentTextField.text = String(calculateMonthlyPaymentCompound(principalAmount: P!, futureValue: A!, numOfPayments: PMT!, interestRate: r! / 100)) }
现在,由于您没有从 if 子句中 return 或没有 if/else 流程,因此当以下文本字段具有值时,下一个 if 计算结果为真:
- futureValueTextField
- 兴趣文本字段
- numOfPaymentsTextField
- principalAmountTextField
并且由于您已为 principalAmountTextField 提供了一个值,因此满足第二个 if 条件并运行代码。