How can I open a new window in a SwiftUI app on macos?

Asked on 08/05/2024

1 search

To open a new window in a SwiftUI app on macOS, you can use the openWindow environment action. Here’s a step-by-step guide based on the information from the WWDC sessions:

  1. Define a Window Group: First, define a new window group in your app. This window group will contain the content you want to display in the new window.

    struct MovieWindow: Scene {
        var body: some Scene {
            WindowGroup("Movie") {
                MovieView()
            }
            .windowStyle(.plain)
        }
    }
    
  2. Retrieve the openWindow Action: In the view where you want to trigger the opening of the new window, retrieve the openWindow action from the environment.

    struct ContentView: View {
        @Environment(\.openWindow) private var openWindow
    
        var body: some View {
            Button("Open Movie Window") {
                openWindow(id: "movie")
            }
        }
    }
    
  3. Use the openWindow Action: Use the openWindow action within a button or any other interactive element to open the new window.

    Button("Open Movie Window") {
        openWindow(id: "movie")
    }
    

Here’s a more detailed example from the session Work with windows in SwiftUI:

struct ContentView: View {
    @Environment(\.openWindow) private var openWindow

    var body: some View {
        Button("Open Movie Window") {
            openWindow(id: "movie")
        }
    }
}

In this example, the openWindow action is used to open a new window with the ID "movie". This ID corresponds to the window group defined earlier.

For more details, you can watch the session Work with windows in SwiftUI.