是否可以使用 SwiftUI 在 TextField 上设置字符限制?

Posted

技术标签:

【中文标题】是否可以使用 SwiftUI 在 TextField 上设置字符限制?【英文标题】:Is it possible to set a character limit on a TextField using SwiftUI? 【发布时间】:2020-05-06 14:07:20 【问题描述】:

[已解决]

我正在使用一个可编码的结构来存储从 API 调用中检索到的对象值,因此我使用 Cenk Belgin 的示例修改了我的 TextField,我还删除了我添加的额外位,因此如果其他人想要这样做同样的事情,他们就不会从我的应用程序中获得不需要的代码。

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

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

    self.item.ProdCode = String($0.prefix(5))

【问题讨论】:

【参考方案1】:

这是一种方法,不确定您给出的其他示例中是否提到过:

@State var text = ""

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

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

【讨论】:

哇,超级简单的答案!【参考方案2】:

ios 14 开始,您可以将 onChange 修饰符添加到 TextField 并像这样使用它:

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

对我来说很好。

【讨论】:

【参考方案3】:

你也可以直接在Textfield绑定中做:

TextField("Text", text: Binding(get: item.ProCode, set: item.ProCode = $0.prefix(5).trimmingCharacters(in: .whitespacesAndNewlines)))

【讨论】:

以上是关于是否可以使用 SwiftUI 在 TextField 上设置字符限制?的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI:TextField文本输入

在 SwiftUI 中捕获绑定的最后一次更改 / 组合

SwiftUI如何让绑定到同一个状态的多个TextField呈现出不同输入行为

SwiftUI如何让绑定到同一个状态的多个TextField呈现出不同输入行为

是否可以使用 SwiftUI 在 TextField 上设置字符限制?

是否有可能停用 SwiftUI 中的按钮?