在SwiftUI中,是否有可能对TextField设置字符限制?

9

[已解决]

我正在使用可编码结构体来存储从API调用中检索的对象值,所以我使用Cenk Belgin的示例修改了我的TextField,并删除了我添加的额外部分,因此如果其他人尝试做同样的事情,则他们不会有我应用程序中不需要的代码片段。

TextField("Product Code", text: $item.ProdCode)

    .onReceive(item.ProdCode.publisher.collect()) {

    self.item.ProdCode = String($0.prefix(5))
}
3个回答

30

以下是一种方法,不确定在您提供的其他示例中是否提到:

@State var text = ""

  var body: some View {
    TextField("text", text: $text)
      .onReceive(text.publisher.collect()) {
        self.text = String($0.prefix(5))
    }
  }

text.publisher 会在每个字符键入时发布它。将它们收集到一个数组中,然后只需取前缀即可。


哇,超级简单的答案! - Mike Taverne

12

iOS 14起,您可以向TextField添加onChange修饰符并像以下方式使用它:

TextField("Some Placeholder", text: self.$someValue)
    .onChange(of: self.someValue, perform: { value in
       if value.count > 10 {
           self.someValue = String(value.prefix(10))
      }
  })

对我来说可以正常工作。


2
您也可以直接在文本字段绑定中进行操作:
TextField("Text", text: Binding(get: {item.ProCode}, set: {item.ProCode = $0.prefix(5).trimmingCharacters(in: .whitespacesAndNewlines)}))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接