标签视图导航上的 SwiftUI 调用功能

Posted

技术标签:

【中文标题】标签视图导航上的 SwiftUI 调用功能【英文标题】:SwiftUI call function on tab view navigation 【发布时间】:2021-12-30 09:50:41 【问题描述】:

我想在用户切换TabView 中的选项卡时执行功能。奇怪的是,我似乎无法用.simultaneousGesture 做到这一点。如果用户在选项卡视图中切换选项卡,如何执行功能?

示例代码:

struct ContentView: View 
    @State var selectedTab: Int = 0
    var body: some View 
        NavigationView 
            TabView(selection: $selectedTab) 
                Text("View One")
                .tabItem 
                    Text("View One")
                
                .simultaneousGesture(TapGesture().onEnded 
                    print("This isn't printing")
                )
            
                Text("View Two")
                    .tabItem 
                        Text("View Two")
                    
                    .simultaneousGesture(TapGesture().onEnded 
                        print("This isn't printing")
                    )
            
                 Text("View Three")
                    .tabItem 
                        Text("View Three")
                    
                    .simultaneousGesture(TapGesture().onEnded 
                        print("This isn't printing")
                    )
            
        
    

编辑:更新代码

struct ContentView: View 
    @State var selectedTab: Int = 0
    var body: some View 
        NavigationView 
            TabView(selection: $selectedTab) 
                Text("View One")
                    .tabItem 
                        Text("View One")
                
            
                Text("View Two")
                    .tabItem 
                        Text("View Two")
                    
            
                Text("View Three")
                    .tabItem 
                        Text("View Three")
                    
            
        
        .onReceive(Just(selectedTab))  thing in
            print("Tapped!!")
            print("\(thing)")
        
    

【问题讨论】:

这是否回答了您的问题***.com/a/64020773/12299030? 我赞成您的回答,因为我认为它可以解决我的问题,但实际上并没有。我的发布者在视图初始化时打印一次,但在更改所选选项卡时不再打印。我会发布更新的代码 像往常一样,@Asperi 答案完美无缺。再看看他的代码。为了使选择起作用,您必须标记选项卡,否则系统不知道哪个是哪个。您在代码中忽略了这一点。在这种情况下,.onReceiveJust 发布者或 .onChange(of:) 都适用。显然,.onChange(of:)ios 14+。 感谢您指出这一点!我忘了标签 【参考方案1】:

为每个选项卡添加.tag 修饰符,并使用自定义Binding 在setter 中完成工作。

struct ContentView: View 
    @State var selectedTab: Int = 0
    var body: some View 
        NavigationView 
            TabView(selection: Binding(
                get:  selectedTab ,
                set: 
                    selectedTab = $0
                    print("switched to tab \(selectedTab)")
                
            )) 
                Text("View One")
                    .tabItem  Text("1") 
                    .tag(1)
                Text("View Two")
                    .tabItem  Text("2") 
                    .tag(2)
                Text("View Three")
                    .tabItem  Text("3") 
                    .tag(3)
            
        
    

【讨论】:

以上是关于标签视图导航上的 SwiftUI 调用功能的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI实现不同TabView标签页中任意导航层级视图之间自动相互跳转那些事儿

带有 SwiftUI 的标签栏上方的额外导航视图

如何导航到 SwiftUI 设置的新视图

如何在 SwiftUI 的标签栏的特定视图中隐藏导航栏?

SwiftUI NavigationView 切换色调颜色

SwiftUI:导航链接中的自定义标签显示为灰色