SwiftUI NavigationLink の有効/無効を切り替える
SwiftUI で NavigationLink の有効/無効の切替サンプルを作った。
ざっくりいうと
NavigationLink は hidden にしておいて直接操作させず、代わりに Button のアクションを一枚噛ませて NavigationLink がアクションする、という流れにするとできた。
NavigationLink の $isActive を初期は false にしておいて、ボタンのタッチ後に true すると NavigationLink の画面遷移が動作するが、そのボタンのタッチで true にするかどうかをここでは Toggle で切替して試している。
コードはこんな感じになる。
import SwiftUI struct ContentView: View { @State var switchState: Bool = false @State var showsAlert = false @State var pushActive = false var body: some View { NavigationView { VStack { Toggle(isOn: $switchState) { Text("Enable NavigationLink") }.frame(width: 260) Spacer().frame(height: 20) Button(action: { guard self.switchState else { self.showsAlert = true return } self.pushActive = true }) { Text("Next") } .alert(isPresented: self.$showsAlert) { Alert(title: Text("Switch is disable.")) } NavigationLink(destination: ContentView2(), isActive: self.$pushActive) { EmptyView() }.hidden() Spacer().frame(height: 32) } .padding() .navigationBarTitle(Text("Index")) .navigationBarHidden(false) } } }