swift TextField设置为多行时无法关闭键盘

lnlaulya  于 2023-03-07  发布在  Swift
关注(0)|答案(1)|浏览(160)

当像这样创建TextField

TextField(
            "Describe...",
            text: $text,
            axis: .vertical
        )
        .focused(focused, equals: .prompt)
        .textFieldStyle(.roundedBorder)
        .lineLimit(2...)
        .modifier(ClearButton(text: $text))
        .submitLabel(.done)
        .onSubmit { hideKeyboard()
            print("test")
        }

当键盘上的done按钮被按下时,它会创建一个新行,我不希望在TextField中有任何新行。
.submitLabel应该可以做到这一点。所以我添加了,但它没有。
接下来我试着创建一个.onSubmit回调函数,也不起作用,事实上,“test”从来没有被打印出来。

zwghvu4y

zwghvu4y1#

这不是因为textfield的多行,而是因为轴。如果删除linelimit,问题仍然存在,但如果更改轴,textfield现在“工作”(它不是多行的)。如果你使用TextEditor也会发生同样的事情。但是,如果您希望多行textField能够不使用键盘,那么一个用户友好的解决方案就是添加一个工具栏。现在,用户将把textField解释为多行textField(因为有return按钮),并且可以选择禁用textField。

struct TestView: View {
    
    enum Field {
        case prompt
    }
    
    @FocusState var focus: Field?
    @State var text = ""
    var body: some View {
        VStack {
                TextField(
                    "Describe...",
                    text: $text,
                    axis: .vertical
                )
                .focused($focus, equals: .prompt)
                .textFieldStyle(.roundedBorder)
                .lineLimit(2...)
                .submitLabel(.return) // <- change to return
                .toolbar { // adding the toolbar
                    ToolbarItemGroup(placement: .keyboard) {
                            Spacer()
                            Button("Done") {
                                focus = nil
                            }
                    }
                }
           
        }
       
    }
}

相关问题