Bei den ersten Gehversuchen mit Swift UI habe ich krampfhaft versucht herauszufinden, wie man das aktive Tab programmatisch auswählt. Der Trick liegt im Binding.
@State public var selection = 0
Mit Klick auf den Button erzählt selection den Wert eins. Da Selection direkt an die Tabbar gebunden ist, ändert sich das aktive Tabitem wunschgemäß.
Button("Go",action: {self.selection = 1})
Binding ist das Zugriffstoken, das Sie weitergeben können, um direkten Lese- und Schreibzugriff auf den Wert zu ermöglichen, ohne den Besitz (im Sinne der Beibehaltung eines Referenztyps) oder das Kopieren (für einen Werttyp) zu gewähren.
Wenn der Benutzer eine Registerkarte in der Registerkartenansicht auswählt, ändert er den Wert einseitig über Bindung und weist der ausgewähltenTab-Variablen das zugehörige .tag(…) zu. Dies funktioniert für @State und ObservableObject auf die gleiche Weise.
Der Programmierer kann dieser ausgewähltenTab-Variablen auch jederzeit einen Wert zuweisen – und die TabView schaltet die angezeigte Registerkarte sofort um.
Dies ist der Schlüssel zur programmatischen Navigation in SwiftUI.
Hier ist ein Beispiel, daß man direkt Copy / Paste übernehmen kann um damit rumzuspielen.
import SwiftUI struct ContentView: View { @State public var selection = 0 let defaults = UserDefaults.standard var body: some View { TabView(selection: $selection){ VStack { Text("First View") Button("Go",action: {self.selection = 1}) } .font(.title) .tabItem { VStack { Image("first") Text("First") } } .tag(0) Text("Second View") .font(.title) .tabItem { VStack { HStack{ Image("second") Text("Second") } } } .tag(1) } } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } }
Über den Autor