web-dev-qa-db-ja.com

Swiftui navigationLink macOSのデフォルト/選択状態

SwiftuiでmacOSアプリをビルドします

最初の項目が事前に選択されているリストビューを作成しようとしています。ナビゲーションリンクの「選択」状態で試してみましたが、機能しませんでした。

私はほとんど無知で、皆さんが私を助けてくれることを願っています。

このリストビューを作成するコードは次のようになります。

//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)
          }
    }
}

(下部のその他のビュー)

これは、アプリを開いたときの通常のビューです。 appnormalstate アイテムをクリックすると、このように開かれます。 このビューをレンダリングするときに、デフォルトの開始状態として希望する状態ですappwantedstate

このビューのコードは次のようになります。

//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()
    }
}

よろしくお願いします!

4
lvollmer

この議論のおかげで、MacOSの初心者として、2つのビューから選択する2つのNavigationLinksを含むリストを備えた非常に基本的なNavigationViewを管理しました。私はそれをよりよく理解するために非常に基本的にしました。他の初心者にも役立つかもしれません。起動時に表示される最初のビューになります。 ContentView.Swiftで変更し、self.selection = 0をself.selection = 1で変更して、2番目のビューから開始します。

FirstView.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()
  }
}

結果:

enter image description here

1
Wild8x