我遇到问题,因为在文本字段中使用值而不是文本时无法设置字符限制。例如,我想将其限制为值 < 50 并在达到该数字后阻止输入。有什么办法可以解决这个问题吗?有趣的是,在 iOS 17 上,这个功能是开箱即用的。
struct ContentView: View {
@FocusState var isFocused: Bool
@State var text = 0
var body: some View {
VStack {
HStack {
TextField("write text here...",
value: $text,
format: .number)
.focused($isFocused)
.keyboardType(.numberPad)
.onChange(of: text) { _ in
if text > 50 {
text = 100
}
}
}
.border(.black)
}
.padding()
}
}
看起来您正在使用的特定 TextField 初始值设定项不会更新显示的值,除非焦点已释放。您可以在此视频中看到,一旦释放焦点,该值就会正确更新为 100:
视频
您最好的解决方案可能是使用不同的 TextField 初始值设定项,并执行手动数字格式设置: