SwiftUI submitLabel nefunguje na TextEditor

0

Otázka

Chci použít .submitLabel změnit tlačítko "return" na něco jiného (a to, .done), ale nezdá se, že pracovat s TextEditor vstupní formulář. Je to má?

Ukázkový kód:

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

Nejlepší odpověď

1

Nadcházející Podporu

  • Byla přidána podpora v Xcode 13.2 beta 3, která zatím není k dispozici.

Dočasná Oprava

Ok, takže na základě mých pokusů, .submitLabel(...) nefunguje s TextEditor. Tam je to možné řešení, kde si přidat Text(...) jako subview do TextEditor(...) ale to je velmi jenk a nedoporučoval bych to. Existuje však řešení, které jsem našel pro iOS 13, který se zdá fungovat přesně stejným způsobem, že TextEditor se zdá, funguje a to je pro použití UIViewRepresentable. Naštěstí to je velmi snadné implementovat. Vytvořit tento 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)
    }
}

Pak použijte, že zobrazit stejně, jako byste používali TextView() kde můžete přiřadit své vlastnosti. Tohle je účinně tahání za UIKit verze textView, takže jeho vlastnosti budou stejné. Můžete získat fantazie s ním v tomto bodě a mix SwiftUI a UIKit vlastnosti a modifikátory.

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

Je tam nevýhoda toho, že je iOS 13 řešení? Zbytek mého projektu je zaměřena na iOS 15.
John Sorensen

Jediná "Nevýhoda" je v nutnosti vypořádat se s UIViewRepresentable ale to se zdá být nejjednodušší řešení. Máte možnost vytvořit vlastní zobrazení, která využívá Text(...) a použití @ViewBuilder vytvořit zobrazení, jak jste jít, ale mám pocit, že je příliš mnoho úsilí pro co stojí za to.
xTwisteDx

@xTwisteDx: Je nějaký důvod, proč používat UIViewRepresentableContext<Self>místo Context?
swiftPunk

V jiných jazycích

Tato stránka je v jiných jazycích

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