基本上我希望这样做:
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
,它在某些情况下出现。我希望在点击外部时关闭选择器,但如果点击选择器内部,它还不应该关闭。因此,我需要专门处理选择器中的触摸。
1条答案
按热度按时间e3bfsja21#
您不能向上阻塞视图层次结构,只能向下阻塞。为了使同步手势仅出现在
VStack
的一部分上,您需要将这些视图分离为它们自己的合成视图,其中.simultaneousGesture()
出现在该视图上。假设您不想更改视图的外观,我会简单地把你想要.simultaneousGesture()
的子视图 Package 在一个Group{}
中。