我正在使用SwiftUI
开发一个应用程序,其中我使用多个视图。我的应用程序的设置视图使用了一个带有导航按钮的自定义UI,而不是List
。我以前使用的是NavigationView
,但由于折旧,我改用NavigationStack
。我不确定我是否正确地实现了这一点。
我的应用程序的层次结构如下:
Jmeter 板>应用程序设置>帐户设置>更改信息>姓名/电子邮件/电话/密码/...>更改信息视图。
在我的应用程序的设置部分,根是“应用程序设置”视图,其中包含各种其他设置视图,如“帐户设置”。一些视图需要在函数运行后以编程方式更改,因此我不能对按钮使用NavigationLink
。
下面是我当前结构的一个例子:
设置视图:
Button(action: {
print("user pressed")
}, label: {
NavigationLink(destination: {
SettingsProfileView()
}, label: {
// UI code omitted for brevity
})
})
帐户设置视图:
Button(action: {
print("Age Restriction Pressed")
withAnimation(.easeInOut(duration: 0.2)) {
}
}, label: {
NavigationLink(destination: {
AccountInfoSubView()
}, label: {
// UI code omitted for brevity
})
})
我遇到的问题是“验证当前密码”视图,该视图在用户可以更改密码之前验证用户的当前密码。在用户更改密码并单击保存后,应该返回到上一个视图。然而,.navigationDestination似乎没有识别出当isPresented不再为真时,它不会返回到前一个视图。
验证当前密码视图:
.navigationBarItems(trailing:
Button(action: {
isPresented = true
}) {
Text("Next")
.foregroundColor(UserValidate().isPasswordValid(textField) ? .orange : .gray)
}
.navigationDestination(isPresented: $isPresented, destination: {
PasswordChangeView(isPresented: $isPresented)
})
)
.preferredColorScheme(.dark)
.padding()
最后,“更改帐户密码”视图:
.navigationBarItems(trailing: Button(action: {
isPresented = false
}))
最后一个视图不会返回到前一个视图,即使isPresented现在为false。如何正确地构建导航,使视图的行为符合预期?
1条答案
按热度按时间h4cxqtbf1#
我认为你正在使用旧的坏方法来设置你的导航流的目的地。
我将与你分享一个帖子和一个视频,其中解释得更好。
https://www.avanderlee.com/swiftui/navigationlink-programmatically-binding/
https://www.youtube.com/watch?v=piAiy5vlC9k&t=3566s&ab_channel=KarinPrater