J'essaie de trouver un moyen d'ajouter une clé ou un bouton au pavé numérique SwiftUI. Les seules références que j'ai trouvées disent que ce n'est pas possible. Dans le monde Swift j'ai ajouté une barre d'outils avec un bouton pour fermer le clavier ou effectuer une autre fonction.
Je voudrais même créer une vue ZStack avec le bouton en haut, mais je ne trouve pas un moyen d'ajouter le pavé numérique à ma propre vue.
Tout ce que j'essaie vraiment de faire dans ce cas, c'est de rejeter le pavé numérique lorsque les données sont entrées. J'ai d'abord tenté de modifier le SceneDelegate pour qu'il disparaisse lors des tapotements, mais cela ne fonctionne que si je tapote dans un autre texte ou vue de champ de texte pas dans un espace ouvert de la vue.
window.rootViewController = UIHostingController(rootView: contentView.onTapGesture {
window.endEditing(true)
})
Idéalement, j'ajouterais une touche Terminé à l'espace inférieur gauche. En second lieu, ajoutez une barre d'outils si cela peut être fait dans SwiftUI.
Tout conseil serait apprécié.
Xcode version 11.2.1 (11B500)
Résolu le problème en utilisant le protocole UIRepresentable
struct TestTextfield: UIViewRepresentable {
@Binding var text: String
var keyType: UIKeyboardType
func makeUIView(context: Context) -> UITextField {
let textfield = UITextField()
textfield.keyboardType = keyType
let toolBar = UIToolbar(frame: CGRect(x: 0, y: 0, width: textfield.frame.size.width, height: 44))
let doneButton = UIBarButtonItem(title: "Done", style: .done, target: self, action: #selector(textfield.doneButtonTapped(button:)))
toolBar.items = [doneButton]
toolBar.setItems([doneButton], animated: true)
textfield.inputAccessoryView = toolBar
return textfield
}
func updateUIView(_ uiView: UITextField, context: Context) {
uiView.text = text
}
}
extension UITextField{
@objc func doneButtonTapped(button:UIBarButtonItem) -> Void {
self.resignFirstResponder()
}
}
Utilisation dans la vue du contenu
struct ContentView : View {
@State var text = ""
var body: some View {
TestTextfield(text: $text, keyType: UIKeyboardType.phonePad)
.frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: 50)
.overlay(
RoundedRectangle(cornerRadius: 16)
.stroke(Color.blue, lineWidth: 4)
)
}
}