SwiftUI submitLabel que não trabalham no TextEditor

0

Pergunta

Eu quero usar .submitLabel para alterar o "retorno" a chave para algo mais (ou seja, .done) mas que não aparecem para trabalhar com o TextEditor formulário de entrada. É suposto?

Código de exemplo:

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

Melhor resposta

1

Próximo De Apoio

  • Foi adicionado suporte no Xcode 13.2 beta 3, que ainda não está disponível.

Correção Temporária

Ok, então, com base em minhas tentativas, .submitLabel(...) não funciona com TextEditor. Há uma solução possível em que você adicionar um Text(...) como uma visualização secundária para o TextEditor(...) mas que é extremamente jenk e eu não recomendo que. Há, porém, uma solução que eu encontrei para iOS 13 que parece funcionar exatamente da mesma maneira que o TextEditor aparece para trabalhar e que da para usar UIViewRepresentable. Felizmente é muito fácil de implementar. Criar esta estrutura.

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

Em seguida, use esse modo de exibição como você poderia usar uma TextView() onde você atribuir suas propriedades. Essa é, efetivamente, puxando o UIKit versão de um textView, de modo que suas propriedades serão os mesmos. Você pode começar a fantasia com ele neste ponto e misture SwiftUI e UIKit propriedades e modificadores.

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

Há desvantagem de ser um iOS 13 solução? O resto do meu projeto está direcionado para iOS 15.
John Sorensen

A única "Desvantagem" é ter que lidar com UIViewRepresentable mas parece ser a solução mais fácil. Você tem a opção de criar o seu próprio modo de exibição personalizado que utiliza Text(...) e usar @ViewBuilder para criar um modo de exibição que você vá, mas eu tenho a sensação de que é muito esforço para que ela vale.
xTwisteDx

@xTwisteDx: existe alguma razão o uso de UIViewRepresentableContext<Self>em vez de Context?
swiftPunk

Em outros idiomas

Esta página está em outros idiomas

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