【发布时间】:2020-05-17 19:18:40
【问题描述】:
我想在View 2 中显示我在View 1 中选择的元素。我写了这个简单的代码,但是它不起作用,因为我无法理解如何在NavigationLink中设置dataStore。任何人都可以更正代码以使其正常工作吗?
import SwiftUI
class DataStore: ObservableObject {
@Published var itemNumber = 0
}
struct ContentView: View {
@EnvironmentObject var dataStore:DataStore
var body: some View {
TabView {
// First View Tab
NavigationView {
List(0..<5) { item in
NavigationLink(destination: DetailView().environmentObject(self.dataStore)) {
Text("Item: \(item)")
}
}
}
.tabItem {
Text("View 1")
}
// Second View Tab
Text("This is the item selected in View Tab 1: \(dataStore.itemNumber)")
.tabItem {
Text("View 2")
}
}
}
}
struct DetailView:View {
@EnvironmentObject var dataStore:DataStore
var body: some View {
Text("Item: \(dataStore.itemNumber)")
}
}
在SceneDelegate 中,我将dataStore 设置为environmentObject:
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow?
var dataStore = DataStore()
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
let contentView = ContentView()
// Use a UIHostingController as window root view controller.
if let windowScene = scene as? UIWindowScene {
let window = UIWindow(windowScene: windowScene)
window.rootViewController = UIHostingController(rootView: contentView.environmentObject(dataStore))
self.window = window
window.makeKeyAndVisible()
}
}
}
【问题讨论】:
标签: swiftui swiftui-navigationlink