ios - 在上下文菜单 SwiftUI 中显示不同的 View

标签 ios swift swiftui contextmenu beta

我正在 SwiftUI 中开发 Mastodon 客户端,我希望允许用户从上下文菜单中查看帖子的预览,就像许多其他应用程序一样。
我知道我可以在 UIKit 中实现这一点,但我还没有在 SwiftUI 中看到如何实现。
例如,假设我有两个 View :CompactView 和 ExpandedView。
CompactView 由 Image 组成和一个 Text行限制为 2,以便隐藏所有其他行。 ExpandedView 也由 Image 组成和一个 Text ,但文本的行数限制为 20,以便显示所有帖子内容。
如果用户强制触摸 CompactView,我想在上下文菜单中显示 ExpandedView 而不是 CompactView。我怎样才能做到这一点?

struct ContentView: some View {

    var body: some View {
        List(0 ..< 5) {
            CompactView()
        }
    }
}

struct CompactView: some View {

    var body: some View {
        HStack {
            Image("profile")
            Text(/*Post content goes here*/)
                .lineLimit(2)
        }
            .contextMenu {
                Button("Report", action: {})
            }
    }
}

struct ExpandedView: some View {

    var body: some View {
        HStack {
            Image("profile")
            Text(/*Post content goes here*/)
                .lineLimit(20)
        }
    }
}
我的代码库不是这样,但我猜方法是一样的。
TL;DR:当用户强制触摸 SwiftUI 中的 View 时,我如何显示不同的 View ?
提前致谢。

最佳答案

首先我们需要这个 - Simple way to implement preview context menu for SwiftUI
例如我的内容 View

struct ContentView: View {

let deleteAction = UIAction(
title: "Remove rating",
image: UIImage(systemName: "delete.left"),
identifier: nil,
    attributes: UIMenuElement.Attributes.destructive, handler: {_ in print("Foo")})

var body: some View {
    NavigationView {
        Text("Hello, World!")
            .contextMenu(PreviewContextMenu(destination: Text("Destination"), actionProvider: { items in
                return UIMenu(title: "My Menu", children: [deleteAction])
            }))
    }
}}
It's gonna look like that

关于ios - 在上下文菜单 SwiftUI 中显示不同的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63131547/

相关文章:

ios - 使用我的 Xcode 在设备上运行项目的时间非常长

ios - 谷歌地图方案通过纬度和经度给出方向不起作用

ios - SwiftUI:如何在搜索栏的文本更改时触发 api 调用以检索数据源

core-data - 在独立的 watchOS 应用上实现核心数据

UIScrollView 总是快速回到中心

ios - 在代码中配置 NSAppTransportSecurity

ios - 获取 Today-Extension 中通知中心的宽度

ios - Swift:函数调用之间的区别

swift - Int 和 String 如何被接受为 AnyHashable?

ios - 我想将图像保存在 UIImageView swift 3 的特定文件夹中