簡體   English   中英

在上下文菜單中顯示不同的視圖 SwiftUI

[英]Show a different view in context menus SwiftUI

我正在 SwiftUI 中開發一個 Mastodon 客戶端,我希望允許用戶從上下文菜單中查看帖子的預覽,就像許多其他應用程序一樣。

我知道我可以在 UIKit 中實現這一點,但我還沒有看到如何在 SwiftUI 中實現。

例如,假設我有兩個視圖:CompactView 和 ExpandedView。 CompactView 由一個Image和一個Text組成,行數限制為 2,因此每隔一行被隱藏。 ExpandedView 也由ImageText組成,但文本的行數限制為 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 中的視圖時,如何顯示不同的視圖?

提前致謝。

首先我們需要這個 - 為 SwiftUI 實現預覽上下文菜單的簡單方法

例如我的內容視圖

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])
            }))
    }
}}

它會看起來像這樣

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM