SwiftUI - NavigationLink 回到之前的视图

5
我正在通过构建一个具有“设置视图”的应用程序来测试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可以自动获取此效果,同时我希望整行都可以被选择。但是以这种方式做,我只能得到目标视图在堆栈顶部推送的效果,所以如果我多次更改语言,则最终会在堆栈顶部堆叠很多视图。
任何帮助将不胜感激!
1个回答

5

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... - maniponken

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接