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 吗?的主要内容,如果未能解决你的问题,请参考以下文章

Android攻城狮认识ContextMenu

SwiftUI - 通过 ContextMenu 呈现模态

Virtuozzo收购OnApp,为服务提供商打造更全面直观的云基础设施解决方案

SwiftUI:contextMenu 菜单

Android ContextMenu的使用

JS组件系列——Bootstrap右键菜单解决方案:ContextMenu