据我所知,在SwiftUI中从TextField解散键盘的唯一内置方法是按return。我想这样做,以便我可以在屏幕上除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,但找不到方法。有没有人知道的方法?
答案 0 :(得分:0)
我们可以使用同步手势。它将在不阻塞任何其他子视图手势的情况下工作。
示例
Vstack{
other subview gestures
}.simultaneousGesture(
TapGesture()
.onEnded { _ in
print("VStack tapped")
}
)