如何解决为什么发生.resignFirstResponder时,货币格式化程序不执行
我正在使用带有美元值和选择器的设置屏幕。我有一个使用currencyFormatter和.keyboardType(.decimalPad)的美元值设置,如果用户在字段外触摸,则不会发生.resignFirstResponder,因此我将其添加到了Picker中。但是,如果用户触摸选择器,则不会应用.currencyFormatter。
private var currencyFormatter: NumberFormatter = {
let formatter = NumberFormatter()
formatter.isLenient = true
formatter.numberStyle = .currency
return formatter
}()
var body: some View {
GeometryReader { geometry in
VStack{
VStack{
HStack{
Text("Burden Rate: ")
.padding(.trailing)
Spacer()
TextField("Enter Burden Rate",value: $meetingSetup.saveRateValue,formatter: currencyFormatter,onEditingChanged: {_ in
logger.log("editing changed")
},onCommit: {
logger.log("updated")
}
)
.textFieldStyle(RoundedBorderTextFieldStyle())
.multilineTextAlignment(.trailing)
.padding(.leading)
.keyboardType(.decimalPad)
}
HStack{
Text("Select One: ")
Spacer()
Picker("Calculation",selection: $selectedRateCalc) {
ForEach( 0 ..< rateCalc.count) {
Text(self.rateCalc[$0]).tag($0)
}
}
.pickerStyle(SegmentedPickerStyle())
.onChange(of: selectedRateCalc,perform: { value in
switch selectedRateCalc {
case 0:
meetingSetup.hourlyEnabled = false
meetingSetup.salaryEnabled = true
print("Salary Selected")
case 1:
meetingSetup.hourlyEnabled = true
meetingSetup.salaryEnabled = false
print("Hourly Selected")
default:
print("ERROR")
}
self.hideKeyboard()
})
}
}
}
Spacer()
}
}
}
#if canImport(UIKit)
extension View {
func hideKeyboard() { UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder),to: nil,from: nil,for: nil)
}
}
#endif
我已经减少了其他一些屏幕,以使其更清洁以供审核。如何正确清除键盘并正确格式化货币。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。