[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)) }
3 Réponses :
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.
Wow, réponse super simple!
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)}))
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.