首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SwiftUI:取消父视图上的TapGesture

SwiftUI:取消父视图上的TapGesture
EN

Stack Overflow用户
提问于 2020-01-28 17:57:08
回答 2查看 3.5K关注 0票数 7

我在SwiftUI中有视图层次结构,比如

代码语言:javascript
运行
复制
ParentView { 
//other views

ChildView().highPriorityGesture(TapGesture().onEnded {
                        print("Tap!")
                    })
// other views 
}self.gesture(tap)

我想让父视图处理屏幕上的所有点击,尽管用户在ChildView上点击的情况下。现在两个闭包都执行了。如何停止点击手势事件向上传播视图层次结构?

EN

Stack Overflow用户

发布于 2020-01-28 18:35:02

好吧,可能有一些具体的ChildViewParentView,因为正如下面(Xcode11.2/ iOS 13.2)测试的那样,子视图手势只是覆盖了父视图手势。

这是演示..在黄色区域点击,然后在绿色区域点击-无混合回调

完整的模块代码

代码语言:javascript
运行
复制
import SwiftUI

struct TestGesturesPriority: View {
    var body: some View {
        VStack {
            Text("Hello, World!")
                .padding()
                .background(Color.yellow)
                .gesture(TapGesture().onEnded {
                    print(" -- child")
                })
        }
        .frame(width: 400, height: 400)
        .background(Color.green)
        .gesture(TapGesture().onEnded {
            print(">> parent")
        })
    }
}

更新:适用于List-Row变体

是啊。List (Parent) - Row (Child)案例看起来非常具有挑战性...请找到下面的方法,它看起来很奇怪,但测试和工作

代码语言:javascript
运行
复制
struct TestGesturesPriority: View {

    let parentGesture = TapGesture().onEnded { // just for convenience
        print(">> parent")
    }

    @GestureState private var captured = false
    var body: some View {
        List {
            Text("Hello, World!").padding()
                    .background(Color.yellow)
                    .allowsHitTesting(true)
                    .gesture(DragGesture(minimumDistance: 0) // mimic Tap
                        .updating($captured, body: { (value, state, transaction) in
                        state = true // mark captured (will be reset automatically)
                    })
                    .onEnded { value in
                        // like Tap, but can be ignored if delta 
                        // is large or out of view
                        print(" -- child")
                    }
                )
        }
        .gesture(parentGesture, including: captured ? .subviews : .gesture)
    }
}

总而言之--实际上我认为这是另一个列表缺陷

票数 5
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59946147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档