【问题标题】:TabView (SwiftUI): Respond onTab on an already active tabItemTabView (SwiftUI):在已经激活的 tabItem 上响应 onTab
【发布时间】:2020-07-17 08:21:29
【问题描述】:

我有一个包含 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)

【问题讨论】:

    标签: ios swift swiftui


    【解决方案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)
            }
        }
    }
    

    【讨论】:

    • 对 TabItems(或 SegmentControls)执行此操作的典型需要是滚动到选项卡内容的顶部,而这个答案并不是一个很好的解决方案。您所知道的只是按下的选项卡的索引,您无权访问选项卡本身。看到您在其他问题特别要求时如何将其他问题关闭为重复,也许您应该写一个更广泛的答案(或停止使用 modhammer 来欺骗您自己的答案)
    • 此解决方案完全解决了问题中描述的问题。也许它不能解决其他需求,但对于那些你可以提出新问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-20
    • 2020-02-09
    • 2020-10-14
    • 2019-06-28
    • 2014-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多