Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.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中的当前视图?_Ios_Swift_Swiftui_Swiftui Navigationview_Swiftui Tabview - Fatal编程技术网

Ios 如何替换SwiftUI中的当前视图?

Ios 如何替换SwiftUI中的当前视图?,ios,swift,swiftui,swiftui-navigationview,swiftui-tabview,Ios,Swift,Swiftui,Swiftui Navigationview,Swiftui Tabview,我正在用SwiftUI开发一个应用程序 我有一个导航视图,导航栏上有按钮。我想用另一个视图替换当前视图,该视图是选项卡视图选择的结果 基本上,当用户单击“编辑”按钮时,我想用另一个视图替换视图以进行编辑,当用户完成编辑后,通过单击“完成”按钮恢复上一个视图 我可以使用一个变量来动态选择当前选项卡视图上显示的视图,但我觉得在SwiftUI中这不是正确的方法。这样我就无法应用任何过渡视觉效果 一些代码示例来解释我在寻找什么 私有扩展ContentView{ @视图生成器 var navigation

我正在用SwiftUI开发一个应用程序

我有一个导航视图,导航栏上有按钮。我想用另一个视图替换当前视图,该视图是选项卡视图选择的结果

基本上,当用户单击“编辑”按钮时,我想用另一个视图替换视图以进行编辑,当用户完成编辑后,通过单击“完成”按钮恢复上一个视图

我可以使用一个变量来动态选择当前选项卡视图上显示的视图,但我觉得在SwiftUI中这不是正确的方法。这样我就无法应用任何过渡视觉效果

一些代码示例来解释我在寻找什么

私有扩展ContentView{ @视图生成器 var navigationBarLeadingItems:一些视图{ 如果tabSelection==3{ 按钮操作:{ 打印编辑按下 //在这里,我想暂时用另一个视图替换tabSelection 3视图,并更新导航栏项目 } { 文本编辑 } } } } 结构ContentView:视图{ var body:一些观点{ 导航视图{ TabViewselection:$tabSelection{ 联系页 .tabItem{ 文本1 } .tag1 短信聊天 .tabItem{ 文本2 } .tag2 设置视图 .tabItem{ 文本3 } .tag3 }.NavigationBarItemsReading:navigationBarLeadingItems } } } 多谢各位

编辑


我有一个工作版本,我只是在我的按钮操作中更新一个切换变量,使我的视图显示一个或另一个东西,它正在工作,但我不能对它应用任何动画效果,而且它在SwiftUI中看起来不正确,我想有更好的东西我不知道。

如果你只是想添加动画,你可以尝试:

struct ContentView: View {
    ...
    @State var showEditView = false

    var body: some View {
        NavigationView {
            TabView(selection: $tabSelection) {
                ...
                view3
                    .tabItem {
                        Text("3")
                    }
                    .tag(3)
            }
            .navigationBarItems(leading: navigationBarLeadingItems)
        }
    }
}

一种可能的替代方法是使用ViewRouter:。

如果您只想添加动画,可以尝试:

struct ContentView: View {
    ...
    @State var showEditView = false

    var body: some View {
        NavigationView {
            TabView(selection: $tabSelection) {
                ...
                view3
                    .tabItem {
                        Text("3")
                    }
                    .tag(3)
            }
            .navigationBarItems(leading: navigationBarLeadingItems)
        }
    }
}

一种可能的替代方法是使用ViewRouter:。

谢谢。我尝试将.transition.slide应用于一个表单{}组,该表单仅在showEditView为true时显示,但它似乎不起作用。没有动画效果。我尝试将.transition应用于表单的每个子项,但结果相同。@BountyHunter我更新了代码,显示了一个新表单。我可以看到转换动画Xcode 11.6,iOS 13.6。在本例中,您可能还需要将.animation.default添加到要设置动画的部分TabView或NavigationViewvar settingsview:some视图{VStack{DisplayProfilecontact:self_info.padding.top Spacer如果设置了它{TextHello1.transition.slide}其他{TextHello2.transition.slide}}我像你一样设置了所有东西,但这里有一个奇怪的行为:当我不点击编辑时:这是正常的,但当我点击时:也没有过渡动画更新:我让它工作了,它不是完美的,但现在就可以了。我上面截图上的问题是因为我使用了.transition.slide而没有.animation.default这使得文本在没有完成动画的情况下复制…谢谢。我尝试将.transition.slide应用到表单{}bloc,仅当showEditView为true时才显示,但它似乎不起作用。没有动画效果。我尝试将.transition应用于表单的每个子项,但结果是相同的。@BountyHunter我用显示新表单的方式更新了代码。我可以看到转换动画Xcode 11.6,iOS 13.6。您可能还需要添加.anim默认设置为在本例中要设置动画的部分TabView或NavigationViewvar settingsview:some视图{VStack{DisplayProfilecontact:self_info.padding.top Spacker if settingsEdit{TextHello1.transition.slide}其他{TextHello2.transition.slide}}我像你一样设置了所有东西,但这里有一个奇怪的行为:当我不点击编辑时:这是正常的,但当我点击时:也没有过渡动画更新:我让它工作了,它不是完美的,但现在就可以了。我上面截图上的问题是因为我使用了.transition.slide而没有.animation.default使文本在未完成动画的情况下复制。。。