在 SwiftUI 中,如何执行手势但将手势转发到其后面的视图?

Wil*_*ler 9 ios swift swiftui

我正在创建一个工具提示系统。

如果用户触摸工具提示之外的任何位置,我想关闭工具提示。

我希望这样在工具提示之外的触摸既可以消除工具提示,又可以激活用户点击的任何控件。(因此,您可以打开一个工具提示,然后仍然单击工具提示外部的按钮,并在第一次点击时激活它。)

为此,我有一个不可见的视图来处理点击手势并消除工具提示,但我不知道如何使 SwiftUI 不拦截并取消点击手势。在网络上,这相当于在 UIKit 中event.stopPropagation()不调用andevent.preventDefault()调用 super intouchesBegan:

有任何想法吗?

Asp*_*eri 16

这是可能方法的演示。使用 Xcode 11.4 / iOS 13.4 进行测试

struct ContentView: View {
    var body: some View {
        VStack {
            Button("Button") { print("> button tapped")}
        }
        .frame(width: 200, height: 200)
        .contentShape(Rectangle())       // makes all area tappable
        .simultaneousGesture(TapGesture().onEnded({
             print(">>> tooltip area here")
        }))
        .border(Color.red)   // just for demo show area
    }
}
Run Code Online (Sandbox Code Playgroud)


wor*_*dog 5

你需要使用这个修饰符:

.allowsHitTesting(false)
Run Code Online (Sandbox Code Playgroud)

  • 这并不能回答我的问题。我需要允许点击测试才能处理点击手势以消除工具提示。但我也希望我的点击能够影响该视图背后的视图。 (3认同)