SwiftUI 如何跟踪 PageTabViewStyle 中的页面索引?

Gar*_*abo 10 ios swift swiftui swiftui-tabview

我试图跟踪用户在 SwiftUI 中所在的页面,TabViewPageTabViewStyle我无法找出跟踪页面索引的最佳方法?using.onAppear效果不佳,因为它会被多次调用,并且即使不在屏幕上,页面 2 和 3 也会被调用。

@State var pageIndex = 0

    var body: some View {
    VStack {
        Text("current page = \(0) ")
        TabView {
            Text("First")
                .onAppear {
                    pageIndex = 0
                }
            Text("Second")
            .onAppear {
                    pageIndex = 1
                }
            Text("Third")
            .onAppear {
                    pageIndex = 2
                }
        }
         .tabViewStyle(PageTabViewStyle(indexDisplayMode: .never))
         }
    }
}
Run Code Online (Sandbox Code Playgroud)

jn_*_*pdx 16

您可以将绑定selection传递给TabView并用于tag识别页面:

struct ContentView: View {
    @State var pageIndex = 0
    
    var body: some View {
        VStack {
            Text("current page = \(pageIndex) ")
            TabView(selection: $pageIndex) {
                Text("First").tag(0)
                Text("Second").tag(1)
                Text("Third").tag(2)
            }
            .tabViewStyle(PageTabViewStyle(indexDisplayMode: .never))
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,在您的原始代码中,它总是会说当前页= 0,因为您没有将变量插入pageIndex到字符串中