SwiftUI WindowGroup открывает несколько окон с одним и тем же идентификатором на iPad

Я хочу создать управляемую данными WindowGroup, чтобы мое приложение могло запускать дополнительные вспомогательные окна. Проблема в том, что на iPad WindowGroup, похоже, не знает, что конкретное окно для этого идентификатора уже открыто, поэтому открывает для него другое окно. На Mac он работает должным образом и выводит на передний план окно с тем же идентификатором.

Вот пример кода

      @main
struct MultiWindowSimpleApp: App {
    
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
        // the additional window
        WindowGroup(id: "AnItem", for: Item.ID.self) { $anID in
            if let anID, let item = Items.main.item(withID: anID ) {
                Text( "\(item.id)")
            }
            else{
                Text( "item not found!")
            }
        }
    }
    
}

//: ======================================================= ://
struct ContentView: View {
    let content = Items()
    var body: some View {
        VStack {
            ForEach(content.items) { anItem in
                ItemView(item: anItem )
            }
        }
        .padding()
    }
}


// Supporting content
//: ======================================================= ://
/// the Item base class

struct Item:Identifiable, Hashable, Codable{
    var id:UUID = UUID()
}


//: ======================================================= ://
/// creates and holds multiple items

struct Items{
    static var main:Items!
    var items:[Item]
    
    init() {
        var items:[Item] = []
        for _ in 0..<5{
            items.append(Item())
        }
        self.items = items
        Self.main = self
    }
    
    func item( withID id:UUID )->Item?{
        return items.first(where: { $0.id == id })
    }
}

//: ===================================================================================== ://
/// displays the item showing its id, and when tapped it opens the item in new window

struct ItemView:View{
    @Environment(\.openWindow) private var openWindow
    @Environment(\.supportsMultipleWindows) private var supportsMultipleWindows
    let item:Item
    var body: some View{
        Text( "\(item.id)" )
            .font(.system(size: 13))
            .frame( maxWidth: .infinity )
            .padding()
            .background(.yellow)
            .onTapGesture {
                if supportsMultipleWindows{
                    openWindow(value: item.id  )
                }
            }
    }
}

Вот снимок экрана:

0 ответов

Другие вопросы по тегам