gpt4 book ai didi

ios - 如何替换 SwiftUI 中的当前 View ?

转载 作者:行者123 更新时间:2023-12-01 21:26:38 25 4
gpt4 key购买 nike

我正在使用 SwiftUI 开发应用程序。
我有一个 NavigationView,并且导航栏上有按钮。我想用另一个替换当前 View (这是 TabView 选择的结果)。
基本上,当用户单击“编辑”按钮时,我想用另一个 View 替换 View 以进行编辑,当用户完成时,通过单击“完成”按钮恢复以前的 View 。
我可以只使用一个变量来动态选择在当前选项卡 View 上显示哪个 View ,但我觉得这不是 SwiftUI 中的“正确做法”。这样我就无法应用任何过渡视觉效果。
一些代码示例来解释我在寻找什么。

private extension ContentView {
@ViewBuilder
var navigationBarLeadingItems: some View {
if tabSelection == 3 {
Button(action: {
print("Edit pressed")
// Here I want to replace the tabSelection 3 view by another view temporarly and update the navigation bar items
}) {
Text("Edit")
}
}
}
}

struct ContentView: View {

var body: some View {
NavigationView {
TabView(selection: $tabSelection) {
ContactPage()
.tabItem {
Text("1")
}
.tag(1)
Text("Chats")
.tabItem() {
Text("2")
}
.tag(2)
SettingsView()
.tabItem {
Text("3")
}
.tag(3)
}.navigationBarItems(leading: navigationBarLeadingItems)
}
}
}
谢谢
编辑
我有一个工作版本,我只需在我的按钮操作中更新一个切换变量,使我的 View 显示一件或另一件事,它正在工作,但我无法对其应用任何动画效果,它在 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)
}
}
}
private extension ContentView {
var view3: some View {
VStack {
if showEditView {
FormView()
.background(Color.red)
.transition(.slide)
} else {
Text("View 3")
.background(Color.blue)
.transition(.slide)
}
}
}
}

struct FormView: View {
var body: some View {
Form {
Text("test")
}
}
}

一种可能的替代方法是使用 ViewRouter: How To Navigate Between Views In SwiftUI By Using An @EnvironmentObject .

关于ios - 如何替换 SwiftUI 中的当前 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63384135/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com