据我所知,在SwiftUI中,唯一内置的关闭TextField键盘的方法是按回车。我想让它可以通过在TextView以外的屏幕某个位置轻触来关闭键盘。有一种这样的方法:
var body: some View {
VStack(alignment: .center, spacing: 0) {
Text("some text")
.frame(maxWidth: .infinity)
.contentShape(Rectangle())
.onTapGesture(
// dismiss keyboard here
)
TextField("text", $binding)
Text("more text")
.frame(maxWidth: .infinity)
.contentShape(Rectangle())
.onTapGesture(
// dismiss keyboard here
)
}
}
这有点繁琐。我希望能以这种方式完成:
var body: some View {
VStack(alignment: .center, spacing: 0) {
Text("some text")
TextField("text", $binding)
Text("more text")
}
.frame(maxWidth: .infinity)
.contentShape(Rectangle())
.onTapGesture(
// dismiss keyboard here
)
}
这基本上有效,但最外层视图的手势会覆盖文本字段的手势。当您第一次按下文本字段时,键盘会显示,但再次按下时会消失,而我不想要这种情况。我希望子视图手势优先。如果VStack中有一个按钮,它应该仅注册按钮并且不包括隐藏手势。我正在研究GestureMask和ExclusiveGesture,但是我找不到方法。有人知道吗?