如何推送详细信息页面并删除 swiftUI 中所有以前的导航链接?
How can I push a detailpage and remove all previous navigationlinks in swiftUI?
我有一个应用程序,其中有多个带有文本字段的屏幕可以创建一些新对象。当用户在最后一个屏幕上选择“创建”时,将执行 API 调用以创建新对象。
从那里我想推送新创建对象的详细信息页面,并且(当视图不再可见时)删除所有带有文本字段的屏幕(因为这不再相关,只会引起混乱。幸运的是,在详细信息页面之前应该只保留一个屏幕。
在 UIKit 中,这将通过在 navigationController
上执行 push
,然后在 [=14] 中编辑 navigationController
的 viewControllers
数组来执行=] 的新屏幕。
如果我是正确的,则无法在 SwiftUI 中编辑视图 NavigationView
,那么我如何在 SwiftUI 中执行此操作?
我通过向 NavigationView 添加一个 id,然后在它应该重置时将其设置为视图模型中的另一个 id 来解决它。
像这样:
struct MyView: View {
@StateObject var viewModel = ViewModel()
var body: some View {
NavigationView {
// ...
}
.id(viewModel.id)
}
}
在视图模型中:
class ViewModel: ObservableObject {
@Published var id = UUID().uuidString
func reset() {
id = UUID().uuidString
}
}
这会重置 NavigationView
,因为 Swift 认为这是一个不同的视图,因为 ID 已更改。
我有一个应用程序,其中有多个带有文本字段的屏幕可以创建一些新对象。当用户在最后一个屏幕上选择“创建”时,将执行 API 调用以创建新对象。
从那里我想推送新创建对象的详细信息页面,并且(当视图不再可见时)删除所有带有文本字段的屏幕(因为这不再相关,只会引起混乱。幸运的是,在详细信息页面之前应该只保留一个屏幕。
在 UIKit 中,这将通过在 navigationController
上执行 push
,然后在 [=14] 中编辑 navigationController
的 viewControllers
数组来执行=] 的新屏幕。
如果我是正确的,则无法在 SwiftUI 中编辑视图 NavigationView
,那么我如何在 SwiftUI 中执行此操作?
我通过向 NavigationView 添加一个 id,然后在它应该重置时将其设置为视图模型中的另一个 id 来解决它。
像这样:
struct MyView: View {
@StateObject var viewModel = ViewModel()
var body: some View {
NavigationView {
// ...
}
.id(viewModel.id)
}
}
在视图模型中:
class ViewModel: ObservableObject {
@Published var id = UUID().uuidString
func reset() {
id = UUID().uuidString
}
}
这会重置 NavigationView
,因为 Swift 认为这是一个不同的视图,因为 ID 已更改。