web-dev-qa-db-fra.com

SWIFTUI NavigationLink MacOS par défaut / état sélectionné

Je construis une application MacOS à Swiftui

j'essaie de créer une liste de réception où le premier élément est présélectionné. Je l'ai essayé avec l'état "sélectionné" de la navigationLink mais cela n'a pas fonctionné.

Je suis assez désemparé et j'espère que vous pouvez m'aider.

Le code de création de cette liste de liste ressemble à ceci.

//personList
struct PersonList: View {
    var body: some View {
          NavigationView
          {
            List(personData) { person in
                NavigationLink(destination: PersonDetail(person: person))
                {
                    PersonRow(person: person)
                }
            }.frame(minWidth: 300, maxWidth: 300)
          }
    }
}

(Autres vues en bas)

C'est la vue normale lorsque j'ouvre l'application. appnormalstate quand je clique sur un article, c'est ouvert comme celui-ci. C'est l'état que je veux comme état d'ouverture par défaut lorsque je rends cette vue. appwantedstate

Le code de cette vue ressemble à ceci:

//PersonRow

struct PersonRow: View {

    //variables definied
    var person: Person

    var body: some View {

        HStack
        {
            person.image.resizable().frame(width:50, height:50)
                .cornerRadius(25)
                .padding(5)

            VStack (alignment: .leading)
            {
                Text(person.firstName + " " + person.lastName)
                    .fontWeight(.bold)
                    .padding(5)
                Text(person.nickname)
                    .padding(5)
            }
            Spacer()
        }
    }
}


//personDetail

struct PersonDetail: View {

    var person : Person

    var body: some View {

        VStack
        {
              HStack
              {
                VStack
                {
                    CircleImage(image: person.image)
                    Text(person.firstName + " " + person.lastName)
                      .font(.title)
                    Text("Turtle Rock")
                      .font(.subheadline)
                }
                Spacer()
                Text("Subtitle")
                  .font(.subheadline)
            }
            Spacer()
        }
        .padding()
    }
}

Merci d'avance !

7
lvollmer

Grâce à cette discussion, en tant que débutant MacOS, j'ai géré une vision de navigation très basique avec une liste contenant deux navigationLinks à choisir entre deux vues. Je l'ai rendu très basique pour mieux comprendre. Cela pourrait aider les autres débutants. Au démarrage, ce sera la première vue qui sera affichée. Il suffit de modifier dans contentView.swift, autoelection = 0 par auto.selection = 1 Pour commencer avec la deuxième vue.

PremièreView.swift

import SwiftUI

struct FirstView: View {

  var body: some View {
    Text("(1) Hello, I am the first view")
      .frame(maxWidth: .infinity, maxHeight: .infinity)
  }
}

struct FirstView_Previews: PreviewProvider {
  static var previews: some View {
    FirstView()
  }
}

Secondview.swift

import SwiftUI

struct SecondView: View {
  var body: some View {
    Text("(2) Hello, I am the second View")
      .frame(maxWidth: .infinity, maxHeight: .infinity)
  }
}

struct SecondView_Previews: PreviewProvider {
  static var previews: some View {
    SecondView()
  }
}

Contentview.swift

import SwiftUI

struct ContentView: View {

  @State var selection: Int?

  var body: some View {

    HStack() {

      NavigationView {
        List () {
          NavigationLink(destination: FirstView(), tag: 0, selection: self.$selection) {
            Text("Click Me To Display The First View")
          } // End Navigation Link

          NavigationLink(destination: SecondView(), tag: 1, selection: self.$selection) {
            Text("Click Me To Display The Second View")
          } // End Navigation Link

        } // End list
          .frame(minWidth: 350, maxWidth: 350)
        .onAppear {
            self.selection = 0
        }

      } // End NavigationView
        .listStyle(SidebarListStyle())
        .frame(maxWidth: .infinity, maxHeight: .infinity)

    } // End HStack
  } // End some View
} // End ContentView

struct ContentView_Previews: PreviewProvider {
  static var previews: some View {
    ContentView()
  }
}

Résultat:

enter image description here

1
Wild8x