SwiftUI 通用上下文菜单视图
SwiftUI Generic ContextMenu view
我有一个显示产品图片和一些基本信息的列表。
当用户点击特定的产品图片时,它实际上会显示一个上下文菜单,用于执行 "save image" 等操作。
以下是我所拥有的简化示例代码。
Image("imageofProduct1")
.contextMenu {
Button("Save", action: {
// Proceed with save function for Product 1
})
}
因为我可能在应用程序的不同部分有产品图片。有没有办法让我创建一个通用的 ContextMenu,它将显示相同的 "save" 操作,但也能够接受感兴趣的图像的名称。
目前,我可以将上下文菜单移动到以下位置:
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 !!
我有一个显示产品图片和一些基本信息的列表。
当用户点击特定的产品图片时,它实际上会显示一个上下文菜单,用于执行 "save image" 等操作。
以下是我所拥有的简化示例代码。
Image("imageofProduct1")
.contextMenu {
Button("Save", action: {
// Proceed with save function for Product 1
})
}
因为我可能在应用程序的不同部分有产品图片。有没有办法让我创建一个通用的 ContextMenu,它将显示相同的 "save" 操作,但也能够接受感兴趣的图像的名称。
目前,我可以将上下文菜单移动到以下位置:
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 !!