SwiftUI-有没有一种方法可以在不覆盖子视图的任何手势的情况下向视图添加手势?

SwiftUI-有没有一种方法可以在不覆盖子视图的任何手势的情况下向视图添加手势?,swiftui,gesture,Swiftui,Gesture,据我所知,在SwiftUI中,从文本字段中删除键盘的唯一内置方法是按return键。我想这样做,我可以点击屏幕上的某个地方而不是文本视图,然后关闭键盘。有一种方法可以这样做: var body: some View { VStack(alignment: .center, spacing: 0) { Text("some text") .frame(maxWidth: .infinity) .contentShape(Rectangle()

据我所知,在SwiftUI中,从文本字段中删除键盘的唯一内置方法是按return键。我想这样做,我可以点击屏幕上的某个地方而不是文本视图,然后关闭键盘。有一种方法可以这样做:

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中有一个按钮,它应该只注册该按钮,而不是取消手势。我在研究手势面具和排他性风格,但我找不到办法。有没有人知道的方法?

我们可以同时使用手势。它将在不阻止任何其他子视图的情况下工作

范例

Vstack{
   other subview gestures
}.simultaneousGesture(
    TapGesture()
    .onEnded { _ in
        print("VStack tapped")
    }
)

这可能会对您有所帮助:我很欣赏这个链接,但不幸的是,我在那里找不到一个不会打断我其他子视图手势的答案。您尝试过我链接到的特定答案吗?是的,我尝试过,我意识到我的原始问题不够清楚。这一解决方案几乎奏效。如果有一个子视图带有点击手势,那么我希望它注册,而不是取消手势。在该解决方案中,两个抽头都注册,而不仅仅是子视图。我编辑了我的原始问题,希望能更清楚。