Я хочу заменить представление другим, когда кнопка нажата в SwiftUI на MacOS (AppKit, а не Catalyst).
Я пытался использовать NavigationLink, как это
struct ContentView: View {
var body: some View {
NavigationView {
NavigationLink( destination: Text("DESTINATIONVIEW").frame(maxWidth: .infinity, maxHeight: .infinity) ,
label: {Text("Next")} )
}.frame(width: 500.0, height: 500.0)
}
}
Назначение Представление представлено как в iPadOS, как презентация Master-Detail справа от исходного представления. Я хочу заменить SourceView на Destination (почти как в iOS)
Другой подход состоял в том, чтобы переключить представленное представление с помощью переменной bool
struct MasterList: View
{
private let names = ["Frank", "John", "Tom", "Lisa"]
@State var showDetail: Bool = false
@State var selectedName: String = ""
var body: some View
{
VStack
{
if (showDetail)
{ DetailViewReplace(showDetail:$showDetail, text: "\(selectedName)" )
} else
{
List()
{
ForEach(names, id: \.self)
{ name in
Button(action:
{
self.showDetail.toggle()
self.selectedName = name
})
{ Text("\(name)")}
.buttonStyle( LinkButtonStyle() )
}
}.listStyle( SidebarListStyle())
}
}
}
}
struct DetailViewReplace: View {
@Binding var showDetail: Bool
let text: String
var body: some View
{
VStack
{
Text(text)
.frame(maxWidth: .infinity, maxHeight: .infinity)
Button(action:
{ self.showDetail.toggle()
})
{ Text("Return")
}
}
}
}
Но это кажется довольно громоздко для меня, если иметь дело со многими взглядами.
Есть ли лучшая практика для этого?