SwiftUI submitLabel不工作上的文本编辑

0

的问题

我想要使用 .submitLabel 改变"重返"的关键要别的东西(即, .done),但它不会出现工作的文本编辑输入形式。 这是应该?

样本代码:

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

即将到来的支持

  • 支持加在低13.2beta3,这是尚未提供。

临时修复

好的,所以根据我的尝试, .submitLabel(...) 不能用文本编辑. 还有一种可能的解决方案,其中添加一个 Text(...) 作为一个子视图的 TextEditor(...) 但是这是极其jenk和我不会推荐。 然而,有一个解决方案,我发现iOS13似乎能完全相同的方式,文本编辑出现的工作,这是使用 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

是有缺点,它正在iOS13的解决方案吗? 我的余项目的目标是在iOS15.
John Sorensen

唯一的"下滑"是具有处理UIViewRepresentable但它似乎是最简单的解决方案。 你有选择创造自己的定义认为,使用了 Text(...) 和使用 @ViewBuilder 建立一个认为你走,但我的感觉就是太多的努力为什么它的价值。
xTwisteDx

@xTwisteDx:是否有任何理由使用 UIViewRepresentableContext<Self>而不是的 Context?
swiftPunk

其他语言

此页面有其他语言版本

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