4

我正在尝试跟踪用户在 SwiftUI 中的哪个页面上,TabViewPageTabViewStyle我无法找出跟踪页面索引的最佳方法?使用.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))
         }
    }
}
4

1 回答 1

6

您可以将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))
        }
    }
}

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

于 2021-03-07T22:31:25.517 回答