Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 选项卡视图(SwiftUI):对已激活的选项卡项响应onTab_Ios_Swift_Swiftui - Fatal编程技术网

Ios 选项卡视图(SwiftUI):对已激活的选项卡项响应onTab

Ios 选项卡视图(SwiftUI):对已激活的选项卡项响应onTab,ios,swift,swiftui,Ios,Swift,Swiftui,我有一个ContentView.swift,它包含一个选项卡视图 View1中有一个NavigationView,其中包含一些子视图。 View2只是一个视图 当按下第一个选项卡项时,我想执行一些操作(始终返回到View1,即使在View1的子视图中也是如此)即使它已经是活动选项卡项。 我尝试了如下所示的手势,但似乎没有任何效果。在“.tag(0)”之前添加它也不会改变任何内容: TabView {

我有一个ContentView.swift,它包含一个选项卡视图

View1中有一个NavigationView,其中包含一些子视图。 View2只是一个视图

当按下第一个选项卡项时,我想执行一些操作(始终返回到View1,即使在View1的子视图中也是如此)即使它已经是活动选项卡项。

我尝试了如下所示的手势,但似乎没有任何效果。在“.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)

以下是可能的方法。使用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)
        }
    }
}
struct TestTabSelectionAction:View{
@状态私有变量selectedTab=0
var body:一些观点{
让选择=绑定(
获取:{self.selectedTab},
集合:{self.selectedTab=$0
打印(“按下的选项卡:\($0)”)
如果$0==0{

//对选项卡项(或分段控件)执行此操作的典型需要就是滚动到标签内容的顶部,这个答案并不是一个很好的解决方案。你所知道的只是被按下标签的索引,你没有访问标签本身的权限。如果你看到其他问题在他们特别要求时是如何重复的,也许你应该写一个更广泛的答案(或者停止使用modhammer for Duppes来回答您自己的问题)此解决方案完全解决了问题中描述的问题。也许它不能解决其他要求,但对于那些要求,您可以提出新的问题。