contextmenu 每次都可以调用 onAppear 吗?
Posted
技术标签:
【中文标题】contextmenu 每次都可以调用 onAppear 吗?【英文标题】:Can contextmenu call onAppear every time? 【发布时间】:2021-10-09 09:08:36 【问题描述】:当用户右键单击显示contextMenu
每次,在单击菜单按钮之前,应用程序需要做一些事情。我试图在onAppear
中设置动作,但onAppear
只被调用一次。有没有其他方法可以检测contextMenu
的每个显示?谢谢。
var body: some View
Text("Hello, world!")
.contextMenu
VStack
Button(action:
)
Text("Normal Colors")
Button(action:
)
Text("Inverted Colors")
.onAppear
// do something before press the button
【问题讨论】:
【参考方案1】:这是一个近似值:
@GestureState var isDetectingLongPress = false
var longPress: some Gesture
LongPressGesture(minimumDuration: 0.1)
.updating($isDetectingLongPress) currentState, gestureState,
transaction in
print("contextMenu appeared")
var body: some View
Text("Hello, world!")
.contextMenu
VStack
Button(action:
)
Text("Normal Colors")
Button(action:
)
Text("Inverted Colors")
.gesture(longPress)
我不确定您的用例,所以我不知道这是否足够好。 LongPressGesture
将始终在contextMenu
激活之前触发,并且它是连续的。在达到LongPressGesture
持续时间之前,contextMenu 不会启动它的计时器。好处是它总是会触发。缺点是它可能会触发,并且用户会在菜单触发之前改变主意并停止手势。
【讨论】:
对不起,这不起作用。每次点击都会立即调用longPress
,即使持续时间设置为 3 秒,也会阻止 contextMenu 显示。
我没有立即看到longPress
激活,但我同意它会阻止contextMenu
,直到longPress
持续时间结束。我把它扔在那里以防万一它有用。
我说 `longPress' 表示手势动作。以上是关于contextmenu 每次都可以调用 onAppear 吗?的主要内容,如果未能解决你的问题,请参考以下文章