Skip to main content

How to show a context menu

About 2 minSwiftSwiftUIArticle(s)bloghackingwithswift.comcrashcourseswiftswiftuixcodeappstore

How to show a context menu 관련

SwiftUI by Example

Back to Home

How to show a context menu | SwiftUI by Example

How to show a context menu

Updated for Xcode 15

SwiftUI gives us the ContextMenu modifier for creating popup menus in our apps. In iOS this is usually triggered with a long press, but it works just the same as a right-click on macOS – it’s a flexible API.

A context menu is built from a collection of buttons, each with their own action, text, and icon. The text and icon can be provided directly inside the button, because SwiftUI will provide an implicit HStack to make sure they fit the system standard look and feel.

So, if we wanted a context menu to be attached to some text, we could provide two buttons for the menu like this:

Text("Options")
    .contextMenu {
        Button {
            print("Change country setting")
        } label: {
            Label("Choose Country", systemImage: "globe")
        }

        Button {
            print("Enable geolocation")
        } label: {
            Label("Detect Location", systemImage: "location.circle")
        }
    }

Download this as an Xcode projectopen in new window

To try that out on iOS, long press on the “Options” text to bring up the menu, or right-click on macOS. It’s worth adding that you can attach these sorts of menus to any SwiftUI views, not just text views.

Similar solutions…
How to show a menu when a button is pressed | SwiftUI by Example

How to show a menu when a button is pressed
Building a menu using List | SwiftUI by Example

Building a menu using List
How to let users pick options from a menu | SwiftUI by Example

How to let users pick options from a menu
How to access a Core Data managed object context from a SwiftUI view | SwiftUI by Example

How to access a Core Data managed object context from a SwiftUI view
How to show an alert | SwiftUI by Example

How to show an alert

이찬희 (MarkiiimarK)
Never Stop Learning.