0

我有一个应用程序,其中有多个带有文本字段的屏幕来创建一些新对象。当用户在最后一个屏幕上选择“创建”时,将执行创建新对象的 API 调用。

从那里我想推送新创建对象的详细信息页面,并且(当视图不再可见时)删除所有带有文本字段的屏幕(因为这不再相关,只会引起混乱。幸运的是只有一个应该保留在详细信息页面之前的屏幕。

在 UIKit 中,这将通过在push上执行navigationController,然后在新屏幕中编辑 的数组来viewControllers执行。navigationControllerviewDidLoad

如果我是正确的,则无法在 SwiftUI 中编辑视图NavigationView,那么如何在 SwiftUI 中执行此操作?

4

1 回答 1

0

我通过向 NavigationView 添加一个 id 来解决它,然后在它应该重置时将它设置为 viewmodel 中的另一个 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
    }
}

这会重置NavigationViewSwift 认为这是一个不同的视图,因为 id 已更改。

于 2021-09-27T10:00:23.160 回答