ios 当手势不在同一层次结构中时,SwiftUI中的专用手势

zwghvu4y  于 2022-12-15  发布在  iOS
关注(0)|答案(1)|浏览(157)

基本上我希望这样做:

struct TestView: View {

var body: some View {
    
    VStack {
        Text("Should work simultaneously").onTapGesture {
            print("Work simultaneously")
        }
        Text("Should work simultaneously").onTapGesture {
            print("Work simultaneously")
        }
        Text("Should be exclusive").onTapGesture {
            print("Work exclusively")
        }
    }
    .simultaneousGesture(
        TapGesture().onEnded {
            print("Should work everywhere except for 3th child view")
        }
    )
}

}
VStack有一个手势,应该总是被识别的,除非他们的查尔兹想要专门处理触摸。
粘贴的代码是一个最小的示例。
在我的真实的项目中,第三个子视图是一个自定义的DatePicker,它在某些情况下出现。我希望在点击外部时关闭选择器,但如果点击选择器内部,它还不应该关闭。因此,我需要专门处理选择器中的触摸。

e3bfsja2

e3bfsja21#

您不能向上阻塞视图层次结构,只能向下阻塞。为了使同步手势仅出现在VStack的一部分上,您需要将这些视图分离为它们自己的合成视图,其中.simultaneousGesture()出现在该视图上。假设您不想更改视图的外观,我会简单地把你想要.simultaneousGesture()的子视图 Package 在一个Group{}中。

struct TestView: View {
    var body: some View {
        VStack {
            Group {
                Text("Should work simultaneously").onTapGesture {
                    print("Work simultaneously")
                }
                Text("Should work simultaneously").onTapGesture {
                    print("Work simultaneously")
                }
            }
            .simultaneousGesture(
                TapGesture().onEnded {
                    print("Should work everywhere except for 3th child view")
                }
            )

            Text("Should be exclusive")
                .onTapGesture {
                    print("Work exclusively")
                }
        }
    }
}

相关问题