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

Kuh*_*ann 4 ios swift swiftui

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

View1 中有一个带有一些子视图的 NavigationView。View2 只是一个视图。

当按下第一个 tabItem 时,我想执行一些操作(总是返回到 View1,即使在 View1 的 childView 中)。 即使它已经是活动的 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)
Run Code Online (Sandbox Code Playgroud)

Asp*_*eri 6

这是可能的方法。使用 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)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 对 TabItems(或 SegmentControls)执行此操作的典型需要是滚动到选项卡内容的顶部,而这个答案实际上并不是一个好的解决方案。您所知道的只是按下的选项卡的索引,您无权访问选项卡本身。看看当其他问题专门询问这个问题时,您如何将其他问题作为重复项关闭,也许您应该写一个更广泛的答案(或者停止使用 modhammer 来欺骗您自己的答案) (6认同)
  • 该解决方案完全解决了问题中描述的问题。也许它不能解决其他需求,但对于那些你可以提出新问题。 (2认同)