Метка отправки SwiftUI не работает в редакторе текста

0

Вопрос

Я хочу использовать .submitLabel чтобы изменить ключ "возврат" на что-то другое (а именно, .done) но, похоже, он не работает с формой ввода TextEditor. Так и должно быть?

Пример кода:

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

Лучший ответ

1

Предстоящая Поддержка

  • Поддержка была добавлена в бета-версию 3 Xcode 13.2, которая пока недоступна.

Временное Исправление

Хорошо, так что, основываясь на моих попытках, .submitLabel(...) не работает с редактором текста. Существует возможное решение, в котором вы добавляете Text(...) в качестве подвида для TextEditor(...) но это очень странно, Дженк, и я бы не рекомендовал этого делать. Однако я нашел решение для iOS 13, которое, похоже, работает точно так же, как, по-видимому, работает редактор текста, и оно предназначено для использования UIViewRepresentable. К счастью, это очень легко реализовать. Создайте эту структуру.

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

Затем используйте это представление так, как вы использовали бы TextView() где вы назначаете его свойства. Это эффективно останавливает UIKit версия текстового представления, поэтому его свойства будут одинаковыми. На этом этапе вы можете пофантазировать с ним и смешать свойства и модификаторы SwiftUI и UIKit.

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

Есть ли недостаток в том, что это решение для iOS 13? Остальная часть моего проекта ориентирована на iOS 15.
John Sorensen

Единственным "недостатком" является необходимость иметь дело с uiviewпредставляемым, но это, кажется, самое простое решение. У вас есть возможность создать свой собственный пользовательский вид, который использует Text(...) и использовать @ViewBuilder чтобы построить представление по ходу дела, но у меня такое чувство, что это слишком много усилий для того, чего это стоит.
xTwisteDx

@xTwisteDx: Есть ли какая-либо причина использовать UIViewRepresentableContext<Self>вместо Context?
swiftPunk

На других языках

Эта страница на других языках

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