NavigationView内に NavigationLinkを実装しdestination内にViewを実装することが可能です。実行後、NavigationLinkをタップするとdestinationへ遷移します。この場合、NavigationViewがないとNavigationLinkは正常な動作をしないようです。
struct Navi1: View{ @State var active1: Bool = false var body: some View{ NavigationView{ NavigationLink(destination: Text("Destination1"), isActive: self.$active1){ Text("NavigationLink1") } } } }
上記のコードはすごくシンプルな例です。NavigationLink1をタップするとText(“Destination1”)が表示されます。
このNavigationLinkと同じ動作をButtonにさせたい場合は下記のようなコードを書きます。
struct NavigationPane: View { let messageDefault = "Destination tag=101" @State var iClick: Int? @State var sDestination: String = "" var body: some View { NavigationView{ VStack{ NavigationLink(destination: VStack{ Text(self.sDestination).onDisappear(perform: { self.sDestination = self.messageDefault }) Spacer() }, tag: 101, selection: self.$iClick){ Text("NavigationLink1") } .padding(.bottom) NavigationLink(destination: VStack{ Text("NavigationLink tag=102") Spacer() }, tag: 102, selection: self.$iClick){ Text("NavigationLink2") }.padding(.bottom) Button("Button1",action: { self.sDestination = "Push the Button1 to the destination tag=101" self.iClick = 101 }) Spacer() }.onAppear(perform: { self.sDestination = self.messageDefault }) } } }
上記コードが実行された場合は下のようなイメージです。
NavigationLink1とNavigationLink2・Button1が表示されています。NavigationLinkは通常通りタップするとdestinationが表示されます。
Buttonをタップするとtag: 101側のNavigationLink destinationが表示されます。その場合、Textには「“Push the Button1 to the destination tag=101”」と表示させています。
NavigationLinkのselection値の変数を変更することで他のNavigationLink destinationが反応してくれるようです。