在应用当中,如何想要限制用户输入的字符串长度,可以通过onChange方法进行监听。
例如,下面是一个输入框,想要用户输入的字符串长度限制在30个字符以内。
TextField("Set the name of the piggy bank", text: $Name)
.onChange(of: Name) { newValue in
if newValue.count > limitLength {
Name = String(newValue.prefix(30))
}
当输入的文本超出30个时,会直接截取超出限制的部分。
通过onChange 确保了输入内容始终符合限制,用户在输入超过长度时会自动截断超出部分。
为了测试,这里把输入的文本数量限制为5个:
Name = String(newValue.prefix(5))
还有一种方法就是通过Binding进行限制,但是在这里的Binding只能限制赋值,而不能限制TextField文本的输入长度。
TextField("Set the name of the piggy bank", text: Binding(
get: {
return Name
},
set: { newValue in
// 限制输入长度
if newValue.count <= 5 {
Name = newValue
}
}
))
主要的原因在于TextField 默认绑定了 Name,但 set 的自定义逻辑并不能完全阻止输入内容传递到 TextField,因此显式地通过 onChange 来实时调整内容。
总结
SwiftUI中如果希望TextField限制用户的输入长度,最好的方法就是通过onChange实时调整TextField的内容。
另一种方法就是通过Binding,但是Binding虽然可以限制赋值的内容长度,但是无法限制TextField输入的长度。
因此,应该考虑onChange来实现这一功能。
相关文章
Swift Binding的闭包实现:https://fangjunyu.com/2024/12/09/swift-binding%e7%9a%84%e9%97%ad%e5%8c%85%e5%ae%9e%e7%8e%b0/