Tio
Tio

Reputation: 1036

How to get a value as to which view is selected in TabView?

I'm currently developing an application using SwiftUI.

This app has 2 Views controlled a Tab View.

I want to get a value as to which view is selected in TabView.

Is there any way to do that?


ContentView.swift

import SwiftUI

struct ContentView: View {
    
   var body: some View {
        TabView {
           FirstView()
                .tabItem {
                        Text("First")
            }.tag(1)
           SecondView()
                .tabItem {
                        Text("Second")
            }.tag(2)
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

FirstView.swift

import SwiftUI

struct FirstView: View {
    var body: some View {
        Text("FirstView")
    }
}

struct FirstView_Previews: PreviewProvider {
    static var previews: some View {
        FirstView()
    }
}

SecondView.swift

import SwiftUI

struct SecondView: View {
    var body: some View {
        Text("SecondView")
    }
}

struct SecondView_Previews: PreviewProvider {
    static var previews: some View {
        SecondView()
    }
}

Xcode: Version 11.7

Swift: Swift 5

Upvotes: 2

Views: 472

Answers (1)

Asperi
Asperi

Reputation: 257693

You need to use selection, like below

Note: selection should be same type as used for tags (and use corresponding values from tags to select specific tab programmatically)

struct ContentView: View {
   @State private var selectedTab = 1  // default selection

   var body: some View {
        TabView(selection: $selectedTab) {     // << here !!
           FirstView()
                .tabItem {
                        Text("First")
            }.tag(1)
           SecondView()
                .tabItem {
                        Text("Second")
            }.tag(2)
        }
    }
}

Upvotes: 1

Related Questions