SwiftUI: Как заменить один вид другим в MacOS - PullRequest
0 голосов
/ 18 января 2020

Я хочу заменить представление другим, когда кнопка нажата в 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")
      }
    }
  }
}

Но это кажется довольно громоздко для меня, если иметь дело со многими взглядами.

Есть ли лучшая практика для этого?

...