一尘不染

TabView(SwiftUI):在已激活的tabItem上响应onTab

swift

我有一个包含TabView的ContentView.swift。

View1中有一个NavigationView以及一些childViews。View2只是一个View。

当第一个tabItem被按下时,我想执行一些操作(即使返回到View1的childView中,也总是返回到View1)。
即使它已经是活动的tabItem。

我尝试了如下所示的onTapGesture,但似乎没有执行任何操作。在“ .tag(0)”之前添加它并没有任何改变,或者:

                            TabView {
                            View1()
                                .onTapGesture {
                                    print("Test")
                            }
                                .tabItem {
                                    Image(systemName: "doc.plaintext")
                                        .font(.system(size: 25))
                                    Text("View1")
                            }.tag(0)

                            View2()
                                .tabItem {
                                    Image(systemName: "person.crop.circle")
                                        .font(.system(size: 25))
                                    Text("View2")
                            }.tag(1)

阅读 443

收藏
2020-07-07

共1个答案

一尘不染

这是可能的方法。经过Xcode 11.4 / iOS 13.4测试

struct TestTabSelectionAction: View {
    @State private var selectedTab = 0

    var body: some View {
        let selection = Binding<Int>(
            get: { self.selectedTab },
            set: { self.selectedTab = $0
                print("Pressed tab: \($0)")
                if $0 == 0 {
                           // <<< your action here !!
                }
        })

        return TabView(selection: selection) {
            View1()
            .tabItem {
                Image(systemName: "doc.plaintext")
                    .font(.system(size: 25))
                Text("View1")
            }.tag(0)

            View2()
                .tabItem {
                    Image(systemName: "person.crop.circle")
                        .font(.system(size: 25))
                    Text("View2")
            }.tag(1)
        }
    }
}
2020-07-07