![](/img/trans.png)
[英]How to fire event handler when the user STOPS a Long Press Gesture in SwiftUI?
[英]SwiftUI text field stops the event to fire NavigationLink when .simultaneousGesture attached
我有以下导航链接:
NavigationLink(destination:
TrendSlider(
title: .constant(title),
col: .constant(self.dataModel.queryColumnSeasonWinPercentageTeam1),
opIndx: self.$dataModel.seasonWinPercentageTeam1OperatorIndxValue,
val: self.$dataModel.seasonWinPercentageTeam1SliderValue,
lBound: .constant(self.dataModel.seasonWinPercentageTeam1Values.first!) ,
uBound: .constant(self.dataModel.seasonWinPercentageTeam1Values.last!),
lRange: self.$dataModel.seasonWinPercentageTeam1RangeSliderLowerValue ,
uRange: self.$dataModel.seasonWinPercentageTeam1RangeSliderUpperValue,
step: .constant(1.0),
displayReadableQuery: $readableQuery
)) {
HStack {
if readableQuery.hasSuffix("IS ANY") {
Text(title)
Spacer()
Text("IS ANY").foregroundColor(Color("TPLightGrey"))
}else{
Text(readableQuery).foregroundColor(Color("TPOrange"))
}
}
}.simultaneousGesture(TapGesture().onEnded{
sendViewSelectionEvent(name: self.title, referral: "Game")
})
如果我留在“.simultaneousGesture ...”中,则点击文本元素不会触发 NavigationLink 操作,但是该行的 rest 确实有效。
如果我删除.simultaneousGesture,则可以再次在任何地方点击该行。
漏洞?
添加.simultaneousGesture(:)
调用是在NavigationLink
的 label 上创建轻击手势识别器,而不是在行本身上。 关于手势识别器的两个事实解释了观察到的行为。
NavigationLink
的 label 实际上位于列表/表单行的上方(见图),这意味着它现在会在点击到达列表/表单行之前拦截它们。 因此,当您点击其中一个文本视图时,点击由TapGesure.onEnded()
闭包处理。 但是,当您点击两者之间的空间时,点击“通过”并由列表/表单行上的识别器处理,从而触发NavigationView
序列。
因此,SwiftUI 设计决策,而不是错误。 目前, List
/ Form
无法在保持导航功能的同时识别自定义手势。 如果您有这种行为的用例,请提交一些反馈,也许我们会在明年看到它。
谢谢你的解释。 这说得通。 它让我寻找一种合适的方式来触发我的电话。
.onAppear(){ .... }
我试图在点击导航链接时模拟 viewWillAppear 类型的事件。 我将 onAppear 放在 vStack 上,效果很好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.