Swiftui tabbar selecteditem

VonTobias Stephan

Swiftui tabbar selecteditem

Tijdens mijn eerste pogingen met Swift UI probeerde ik wanhopig uit te zoeken hoe ik het actieve tabblad programmatisch kon selecteren. De truc zit hem in de binding.

@State public var selection = 0

Met een klik op de knop selectie vertelt de waarde een. Aangezien Selectie direct gekoppeld is aan de tabbladbalk, verandert het actieve tabblad-item naar wens.

Button("Go",action: {self.selection = 1})

Bindend is het access token dat u kunt doorgeven om directe lees- en schrijftoegang tot de waarde mogelijk te maken zonder bezit (in de zin van het behouden van een referentietype) of kopiëren (voor een waardetype).

Wanneer de gebruiker een tabblad in het tabbladoverzicht selecteert, verandert hij of zij de waarde eenzijdig via binding en wijst de bijbehorende .tag(…) toe aan de geselecteerdeTab-variabele. Dit werkt op dezelfde manier voor @State en ObservableObject.

De programmeur kan ook op elk moment een waarde aan deze geselecteerde tabbladvariabele toekennen – en het tabbladView schakelt onmiddellijk naar het getoonde tabblad.
Dit is de sleutel tot programmatische navigatie in SwiftUI.

Hier is een voorbeeld dat je direct kunt kopiëren / plakken om ermee te spelen.

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

Tobias Stephan administrator

Schreibe eine Antwort