【问题标题】:SwiftUI - NavigationLink to go back to previous viewSwiftUI - NavigationLink 返回上一个视图
【发布时间】:2020-10-04 22:47:54
【问题描述】:

我正在通过构建一个具有“设置视图”的应用程序来测试 SwiftUI,我们称之为 ViewB。此视图有一个列表,您可以在其中选择一种语言。 第一个视图,ViewA 有 2 个按钮“打开”或“选择语言”。

我要做的是,从 ViewA 开始,打开 ViewB,选择一种语言并自动回到 ViewA。这就是我所做的:

查看A

var body: some View {
    NavigationView {
        VStack(alignment: .center) {
            Button(action: start) {
                Text("Open")
            }
            NavigationLink(destination: ViewB()) {
                Text("Change language")
            }
        }
        .sheet(isPresented: $presenting) {
            DemoView(code: self.langugage ?? "SE") { result in }
        }
    }
}

这就是我在 ViewB 上的进展:

var body: some View {
    List(langs) { item in
        HStack {
            NavigationLink(destination: ViewA(presentingSuccessScreen: self.$isPresentingSuccessScreen, language: item.code)) {
                Image(item.icon).resizable().frame(width: 40, height: 40)
                Text(item.market)
            }.frame(height: 64)
        }
        .navigationBarTitle(Text("Select Language"), displayMode: .inline)
        .navigationBarBackButtonHidden(true)
        .navigationBarItems(trailing:
            Button("Cancel") {
                self.presentationMode.wrappedValue.dismiss()
        })
    }
}

我希望在每一行的右侧有一个“>”图像,您可以使用 NavigationList 自动获得该图像,并且我希望整行都是可选的。但是通过这种方式,我得到的只是将目标视图推到堆栈顶部,所以如果我多次更改语言,我最终会得到很多相互叠加的视图。

任何帮助将不胜感激!

【问题讨论】:

    标签: swiftui swiftui-list swiftui-navigationlink


    【解决方案1】:

    NavigationLink 仅在一个方向上起作用。相反,您需要类似

    HStack {
        VStack {
            Image(item.icon).resizable().frame(width: 40, height: 40)
            Text(item.market)
        }.frame(height: 64)
        .onTapGesture {
            // set item.code & success flag to some view model and then
            // just call dismiss to return to ViewA
            self.presentationMode.wrappedValue.dismiss()
        }
    }
    

    【讨论】:

    • 我明白了,这很不幸。我尝试将图像和文本放在按钮内。现在我只需要弄清楚如何使用environmentObject的...
    猜你喜欢
    • 2021-04-01
    • 2020-01-16
    • 2021-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-10
    • 2021-01-05
    • 2020-05-22
    相关资源
    最近更新 更多