SwiftUI限制用户的输入长度
SwiftUI限制用户的输入长度

SwiftUI限制用户的输入长度

在应用当中,如何想要限制用户输入的字符串长度,可以通过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/

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开放者。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注