swift - UITextfield 值在按下 6、7、8、9 时递增并限制编辑
问题描述
UITextField 响应不正确。我无法删除当前值,但是当我按下键盘上的数字 6、7、8、9 时,值会发生变化。此文本字段的方法是使用 UITextfield 委托设置的。当我屏蔽 shouldChangeCharactersIn 下的代码部分时,它可以工作。我的问题是为什么代码限制文本字段输入并且仅在键盘上按下某些数字时才响应?
func textFieldDidEndEditing(_ textField: UITextField) {
let selectedLender = mortgageLender.text
let selectedTerm = mortgageTerm.text
let matchedLender = Data.currentRateData.first(where: {$0.financialInstitution == selectedLender})
let sixMonthRate = matchedLender?.sixMonths
let oneYearRate = matchedLender?.oneYear
let twoYearRate = matchedLender?.twoYear
let threeYearRate = matchedLender?.threeYear
let fourYearRate = matchedLender?.fourYear
let fiveYearRate = matchedLender?.fiveYear
DispatchQueue.main.async {
var selectedRateString:String = "0"
if selectedTerm == "sixMonths" {
let selectedRate = sixMonthRate
selectedRateString = selectedRate ?? "0"
} else if selectedTerm == "1 Year" {
let selectedRate = oneYearRate
selectedRateString = selectedRate ?? "0"
} else if selectedTerm == "2 Year"{
let selectedRate = twoYearRate
selectedRateString = selectedRate ?? "0"
} else if selectedTerm == "3 Year" {
let selectedRate = threeYearRate
selectedRateString = selectedRate ?? "0"
}else if selectedTerm == "4 Year" {
let selectedRate = fourYearRate
selectedRateString = selectedRate ?? "0"
}else if selectedTerm == "5 Year" {
let selectedRate = fiveYearRate
selectedRateString = selectedRate ?? "0"
}
self.mortgageInterestRate.text = selectedRateString.percentage
}
func textField(_ textField: UITextField, shouldChangeCharactersIn
range: NSRange, replacementString string: String) -> Bool {
if textField.text == mortgageInterestRate.text {
let text: NSString = (textField.text ?? "") as NSString
let finalString = text.replacingCharacters(in: range, with:
string)
mortgageInterestRate.text = finalString.percentage
return false
}
}
var percentage: String {
// removing all characters from string before formatting
let stringWithoutSymbol = self.replacingOccurrences(of: "%", with:
"")
let styler = NumberFormatter()
styler.minimumFractionDigits = 2
styler.maximumFractionDigits = 2
styler.numberStyle = .percent
styler.multiplier = 1
if let result = NumberFormatter().number(from: stringWithoutSymbol)
{
return styler.string(from: result)!
}
return self
}
解决方案
推荐阅读
- rust - 你能在一个地方更新一个数字,并让它在它被引用的地方改变吗?
- excel - 单击按钮onclick事件硒VBA
- flutter - PersistentBottomNavBar 的问题:MediaQuery.of(context)
- python - 根据列表元素中的字符将列表元素拆分为子列表
- python - 将对象转换为 int (Python pandas)
- terraform - Terraform,ElasticSearch:无法访问此站点
- java - 如何在 JAVA 中通过命令行读取文件?
- python - 在 python 中使用 while 和 elif 语句有几个错误
- xml - 加载,修改,然后保存 testng-results.xml
- c# - 如何在 Windows uwp 应用程序上使用 Iot.Device.Bindings nuget 包?