【问题标题】:In SwiftUI, how can I perform a gesture but forward gestures to the view behind it?在 SwiftUI 中,如何执行手势但将手势转发到其后面的视图?
【发布时间】:2020-04-13 03:33:41
【问题描述】:

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

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

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

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

有什么想法吗?

【问题讨论】:

    标签: ios swift swiftui


    【解决方案1】:

    这是一个可能的方法的演示。使用 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
        }
    }
    

    【讨论】:

    • Tnx。你拯救了我的一天。我遇到了 PDFView 问题,它上面的按钮不接受触摸事件。
    【解决方案2】:

    你需要使用这个修饰符:

    .allowsHitTesting(false)
    

    【讨论】:

    • 这不能回答我的问题。我需要允许点击测试以处理点击手势以关闭工具提示。但我也希望我的点击能够影响该视图背后的视图。
    猜你喜欢
    • 2021-11-12
    • 2020-10-19
    • 2015-02-08
    • 2022-01-26
    • 1970-01-01
    • 1970-01-01
    • 2013-06-25
    • 2020-08-17
    • 1970-01-01
    相关资源
    最近更新 更多