我正在尝试学习 SwiftUI,我将开发一个带有选项卡视图的简单应用程序,并在这些视图之间共享核心运动数据。
主要思想是创建一个运动管理器对象(如这里)并在所有视图中使用传感器值。
ContentView.swift
:
import SwiftUI
struct ContentView: View {
@State private var selection = 1
@State private var viewNames : [String] = ["View1", "View2"]
var body: some View {
TabView(selection: $selection){
View1(viewName: $viewNames[0]).tag(0)
View2(viewName: $viewNames[1]).tag(1)
}
}
}
View1.swift
:
import SwiftUI
struct View1 : View {
@Binding var viewName : String
var body: some View {
Text("First View")
.font(.title)
.foregroundColor(Color.gray)
.tabItem {
VStack {
Image(systemName: "star")
Text(viewName)
}
}
}
}
View2.swift
:
struct View2 : View {
@Binding var viewName : String
var body: some View {
VStack {
Text("Second View")
.font(.title)
.foregroundColor(Color.green)
.padding(.top)
View21(motionManager: MotionManager())
}.tabItem {
VStack {
Image(systemName:"heart")
Text(viewName)
}
}
}
}
View21.swift
struct View21 : View {
@ObservedObject var motionManager : MotionManager
@State private var showDetails = false
var body: some View{
Text(String(format: "%.2f", motionManager.x))
}
使用这些代码,我可以使用 中的传感器数据View21
,但无法访问上述层次结构中视图中的数据。
此外,我@ObservedObject
在 ContentView 中创建(如此处)并将其传递给所有视图。我的应用程序在模拟器中工作,但它不在真实设备上。我可以看到传感器数据发生变化,但无法切换选项卡视图。我尝试使用@EnvironementObject
而不是@ObservedObject
,但行为是相同的。
对于我的问题的任何帮助和提示,我将非常感谢。最良好的祝愿