SwiftUI SubmitLabel 不适用于文本编辑器

Joh*_*sen 6 input swiftui

我想用来.submitLabel将“返回”键更改为其他键(即.done),但它似乎不适用于 TextEditor 输入表单。是应该的吗?

示例代码:

struct ContentView: View {
    @State var text: String = ""

    var body: some View {
        Form {
            TextEditor(text: $text)
                .submitLabel(.search)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

xTw*_*eDx 3

即将推出的支持

  • Xcode 13.2 beta 3 中添加了支持,但尚不可用。

临时修复

好的,根据我的尝试,.submitLabel(...)文本编辑器不起作用。有一个可能的解决方案,您可以将 aText(...)作为子视图添加到 中TextEditor(...),但这非常糟糕,我不建议这样做。然而,我为 iOS 13 找到了一个解决方案,其功能似乎与 TextEditor 的工作方式完全相同,那就是使用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)
    }
}
Run Code Online (Sandbox Code Playgroud)

然后使用该视图,就像使用TextView()分配其属性的位置一样。这实际上是拉动UIKittextView 的版本,因此它的属性将是相同的。此时您可以喜欢它并混合 SwiftUI 和 UIKit 属性和修饰符。

    TextView { view in
        view.text = sampleText
        view.returnKeyType = .done
    }
Run Code Online (Sandbox Code Playgroud)