generics - SwiftUI 通用上下文菜单 View

标签 generics swiftui contextmenu

我有一个显示产品图片和一些基本信息的列表。

当用户点击特定的产品图像时,它实际上会显示一个上下文菜单,用于执行“保存图像”等操作。

以下是我所拥有的简化示例代码。

    Image("imageofProduct1")
        .contextMenu {
            Button("Save", action: {
                // Proceed with save function for Product 1
            })
    }

因为我可能在应用程序的不同部分有产品图像。有没有办法让我创建一个通用的上下文菜单,它将显示相同的“保存”操作,但也能够接受感兴趣的图像的名称。

目前,我可以将上下文菜单移动到以下位置:

func ContextMenuContent() -> some View {
    return Button("Save") {
        // Save function of the image
    }
}

在主体中,我能够显示相同的上下文菜单:

Image("imageofProduct1")
        .contextMenu(menuItems: ContextMenuContent)

如果我要将 ContextMenu 函数移动到一个单独的文件中。为了封装,我是否可以以某种方式传入图像的名称,以便根据提供的图像的名称执行图像保存功能?

最佳答案

方法可以如下

func ContextMenuContent(_ imageName: String) -> some View {
    return Button("Save") {
        // Save function of the image
        // use imageName here
    }
}

和使用

更新:(使用 Xcode 11.4 测试)

// it does not matter how it get here
let imageName = "imageofProduct1" 

//...

Image(imageName) // or same constant here and below
        .contextMenu { ContextMenuContent(imageName) } // here !!

关于generics - SwiftUI 通用上下文菜单 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61505039/

相关文章:

swift - CoreData 和 SwiftUI : Context in environment is not connected to a persistent store coordinator

python - 使用 pywin32 的带有子菜单的 Windows 资源管理器上下文菜单

c# - 如何激活 ListView 项目而不是列标题的上下文菜单

windows - 注册表中命令的重定向

c# - 为什么重载决议在这里不起作用?

C#,是否可以在不继承的情况下向所有数据输入控件添加通用属性? (类似于扩展方法)

swift - 如何释放 RealityKit ARView()?

ios - 如何将 UIImage 异步加载到 SwiftUI Image 中?

c# - 如果没有 `typedef` ,如何创建在 C# 泛型中使用的相关类型组?

java - 动态类型检查匹配类型参数