SwiftUI submitLabel ne fonctionne pas sur TextEditor

0

La question

Je veux utiliser .submitLabel pour modifier la touche "retour" à autre chose (à savoir, .done) mais il ne semble pas fonctionner avec la TextEditor formulaire de saisie. Est-il censé faire?

Exemple de code:

struct ContentView: View {
    @State var text: String = ""

    var body: some View {
        Form {
            TextEditor(text: $text)
                .submitLabel(.search)
        }
    }
}
input swiftui
2021-11-24 00:06:56
1

La meilleure réponse

1

Soutien

  • Un soutien a été ajouté dans Xcode 13.2 beta 3, qui n'est pas encore disponible.

Correctif Temporaire

Ok, d'après mes tentatives, .submitLabel(...) ne fonctionne pas avec TextEditor. Il y a une solution possible lorsque vous ajoutez un Text(...) en tant que sous-vue de la TextEditor(...) mais c'est extrêmement jenk et je ne le recommande pas. Il y a cependant une solution que j'ai trouvé pour iOS 13 qui semble fonctionner exactement de la même manière que le TextEditor apparaît à travailler, et c'est pour l'utiliser UIViewRepresentable. Heureusement, il est très facile à mettre en œuvre. Créer cette structure.

struct TextView: UIViewRepresentable {
    
    typealias UIViewType = UITextView
    var configuration = { (view: UIViewType) in }
    
    func makeUIView(context: UIViewRepresentableContext<Self>) -> UIViewType {
        UIViewType()
    }
    
    func updateUIView(_ uiView: UIViewType, context: UIViewRepresentableContext<Self>) {
        configuration(uiView)
    }
}

Utilisez ensuite ce point de vue comme vous le feriez avec un TextView() permet d'affecter ses propriétés. C'est effectivement en tirant sur la UIKit version d'un textView, de sorte que ses propriétés sont les mêmes. Vous pouvez obtenir la fantaisie avec elle à ce point et le mélange SwiftUI et UIKit des propriétés et des modificateurs.

    TextView { view in
        view.text = sampleText
        view.returnKeyType = .done
    }
2021-11-25 01:56:48

Est-il inconvénient à ce qu'elle soit un iOS 13 solution? Le reste de mon projet est ciblé sur iOS 15.
John Sorensen

Le seul "Inconvénient" est d'avoir à traiter avec UIViewRepresentable, mais il semble être la solution la plus simple. Vous avez la possibilité de créer votre propre affichage personnalisé qui utilise Text(...) et l'utilisation @ViewBuilder pour construire une vue d'y aller, mais j'ai l'impression que c'est trop d'effort pour ce que ça vaut.
xTwisteDx

@xTwisteDx: Est-il une raison à l'aide de UIViewRepresentableContext<Self>au lieu de Context?
swiftPunk

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................