Skip to main content

Kontextmenü für Fotoaktionen

Beschreibung

Diese View zeigt ein Bildsymbol, das beim langen Drücken ein Kontextmenü mit häufigen Aktionen anzeigt. Der Nutzer kann z. B. eine Teilen oder Löschen Aktion auslösen. Die Umsetzung nutzt das native contextMenu in SwiftUI für sekundäre Interaktionen.

🔍 Zweck

  • Schneller Zugriff auf Sekundäraktionen an Medien
  • Kontextmenüs in Listen oder Grids von Bildern ergänzen
  • Prototyping von Datei oder Medienaktionen
  • Reduzierung von UI Clutter durch Auslagerung seltener Aktionen
  • Konsistentes Action Pattern mit SF Symbols

🖥️ Betriebssystem

iOS

📄 Codebeispiel

import SwiftUI

@main
struct PhotoContextMenuApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

public struct ContentView: View {
    // Track whether we should show a delete confirmation
    @State private var showDeleteAlert = false

    public init() {}

    public var body: some View {
        // Placeholder image that exposes a context menu on long press
        Image(systemName: "photo")
            .resizable()
            .scaledToFit()
            .frame(width: 100, height: 100)
            .accessibilityLabel("Photo")
            .contextMenu {
                // Share action placeholder
                Button {
                    // Replace with real share flow if needed
                    print("Share tapped")
                } label: {
                    Label("Share", systemImage: "square.and.arrow.up")
                }

                // Delete action triggers a confirmation alert
                Button(role: .destructive) {
                    showDeleteAlert = true
                } label: {
                    Label("Delete", systemImage: "trash")
                }
            }
            // Present a simple confirmation for delete
            .alert("Delete this photo?", isPresented: $showDeleteAlert) {
                Button("Delete", role: .destructive) {
                    // Perform deletion here
                    print("Deleted")
                }
                Button("Cancel", role: .cancel) {}
            }
            .padding()
    }
}

// Modern Swift 5.10+ preview syntax
#Preview {
    ContentView()
}