SwiftUI submitLabel nu funcționează pe TextEditor

0

Problema

Vreau să folosesc .submitLabel pentru a schimba "întoarcere" - cheie pentru altceva (și anume, .done) dar nu par sa lucreze cu TextEditor formular de intrare. Ar trebui să?

Mostre de cod:

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

Cel mai bun răspuns

1

Viitoare De Sprijin

  • Sprijinul a fost adăugat în Xcode 13.2 beta 3, care nu este încă disponibil.

Fix Temporar

Ok, deci bazat pe încercările mele, .submitLabel(...) nu funcționează cu TextEditor. Există o posibilă soluție în cazul în care adăugați un Text(...) ca un subview la TextEditor(...) dar care este extrem de jenk și nu aș recomanda asta. Cu toate acestea, există o soluție am găsit pentru iOS 13, care pare să funcționeze exact în același mod în care TextEditor pare să funcționeze și că este de a utiliza UIViewRepresentable. Din fericire, este foarte ușor să pună în aplicare. A crea acest struct.

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

Apoi folosiți ca vezi ca ai folosi-o TextView() unde ai atribui proprietățile sale. Acest lucru este eficient trăgând de-a lungul UIKit versiune de un textView, astfel încât proprietățile sale va fi la fel. Puteți obține de lux cu ea în acest moment și se amestecă SwiftUI și UIKit proprietăți și modificatori.

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

Există dezavantajul de a fi un iOS 13 soluție? Restul de proiect se adresează iOS 15.
John Sorensen

Singurul "Dezavantaj" este de a avea de a face cu UIViewRepresentable dar se pare a fi cea mai simplă soluție. Aveți opțiunea de a crea propriul dvs. personalizat de vedere, care utilizeaza Text(...) și de a folosi @ViewBuilder pentru a construi o vedere ca te duci, dar am impresia că este prea mult efort pentru ceea ce merită.
xTwisteDx

@xTwisteDx: există vreun motiv pentru care utilizarea UIViewRepresentableContext<Self>în loc de Context?
swiftPunk

În alte limbi

Această pagină este în alte limbi

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