SwiftUI中的程序化导航,用于通用链接

时间:2020-07-28 12:10:03

标签: ios swiftui swiftui-navigationlink

在使用通用链接时,我试图以编程方式导航到正确的屏幕。这应该在场景委托中完成,但是我很困惑如何导航到正确的视图?

我已经尝试过了,但是单击导航后出现奇怪的行为,视图会自动推送并弹出而无需我按任何东西。

class AppState: ObservableObject
{
    @Published var selectedId: String?
}

这就是我在列表中使用它自动导航的方式。

NavigationLink(destination: DetailView(item: item), tag: item.id, selection:  self.$appState.selectedId)

这就是我得到的:https://swiftui-lab.com/bug-navigationlink-isactive/

1 个答案:

答案 0 :(得分:0)

没有更多代码,很难再现您的问题。

您可以根据提供的示例尝试使用此模板:

struct Item: Identifiable {
    let id: Int
    let text: String
}

class AppState: ObservableObject {
    @Published var selectedId: Int?

    let items: [Item] = [
        Item(id: 0, text: "Zero"),
        Item(id: 1, text: "One"),
        Item(id: 2, text: "Two"),
        Item(id: 3, text: "Three"),
        Item(id: 4, text: "Four"),
    ]
}

struct ContentView: View {
    @ObservedObject private var appState = AppState()

    var body: some View {
        NavigationView {
            List(self.appState.items) { item in
                NavigationLink(destination: DetailView(item: item), tag: item.id, selection: self.$appState.selectedId) {
                    Text(item.text)
                }
            }
        }
    }
}

struct DetailView: View {
    let item: Item

    var body: some View {
        Text(item.text)
    }
}

在Xcode 11.5,iOS 13.5中进行了测试。