4
votes

Est-il possible de définir une limite de caractères sur un TextField à l'aide de SwiftUI?

[RÉSOLU]

J'utilise une structure codable qui stocke les valeurs d'objet récupérées à partir d'un appel API, j'ai donc modifié mon TextField en utilisant l'exemple de Cenk Belgin, j'ai également supprimé des bits supplémentaires que j'ai ajoutés, donc si quelqu'un d'autre essaie de faire la même chose alors ils n'auront pas de morceaux de code de mon application qui ne sont pas nécessaires.

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

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

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


0 commentaires

3 Réponses :


13
votes

Voici une façon, je ne sais pas si elle a été mentionnée dans les autres exemples que vous avez donnés:

@State var text = ""

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

Le text.publisher publiera chaque caractère au fur et à mesure de sa saisie. Rassemblez-les dans un tableau, puis prenez simplement le préfixe.


1 commentaires

Wow, réponse super simple!



2
votes

Vous pouvez également le faire directement dans la liaison Textfield:

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


0 commentaires

0
votes

Depuis iOS 14, vous pouvez ajouter le modificateur onChange au TextField et l'utiliser comme ceci:

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

Fonctionne bien pour moi.


0 commentaires