SwiftUI submitLabel non TextEditor

0

Domanda

Voglio usare .submitLabel per cambiare il tasto "invio" per qualcos'altro (vale a dire, .done) ma non sembra funzionare con il TextEditor input di un form. E ' dovuto?

Codice di esempio:

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

Migliore risposta

1

Prossimo Supporto

  • Il supporto è stato aggiunto in Xcode 13.2 beta 3, che non è ancora disponibile.

Temporary Fix

Ok, quindi, in base a i miei tentativi, .submitLabel(...) non funziona con TextEditor. C'è una possibile soluzione a cui si aggiunge un Text(...) come sottoview per il TextEditor(...) ma che è estremamente jenk e non mi consiglia di che. C'è tuttavia una soluzione che ho trovato per iOS 13 che sembra funzionare esattamente allo stesso modo che il TextEditor sembra funzionare usare UIViewRepresentable. Per fortuna è molto facile da implementare. Creare questa struttura.

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)
    }
}

Poi l'uso che se vista come fosse un TextView() dove si assegnano le sue proprietà. Questo è effettivamente tirare oltre il UIKit versione di una textView, quindi la sua proprietà sarà lo stesso. È possibile ottenere fantasia con, a questo punto, e mescolare SwiftUI e UIKit proprietà e modificatori.

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

C'è aspetto negativo di essere un iOS 13 soluzione? Il resto del mio progetto è mirato a iOS 15.
John Sorensen

L'unico "Svantaggio" è di avere a che fare con UIViewRepresentable, ma sembra essere la soluzione più semplice. Hai l'opzione di creare il proprio personalizzato di visualizzazione che utilizza Text(...) e l'uso @ViewBuilder per creare una visualizzazione, come si va, ma ho la sensazione che sia troppo sforzo per quello che vale.
xTwisteDx

@xTwisteDx: c'È qualche motivo UIViewRepresentableContext<Self>invece di Context?
swiftPunk

In altre lingue

Questa pagina è in altre lingue

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