我有以下代码。当应用启动时, MasterView 正在打开,然后我单击一行并转到 DetailView 。将 RootTabView 中的标签更改为 OtherView 之后。然后,当我回到 MasterView 时,它会自动打开 DetailView 。
vm.getList()
和vm.getDetail()
方法同样适用。为什么在 SwiftUI 2 中会发生这种情况?因为在 SwiftUI 1 中,它不是那样工作的。
struct RootTabView: View {
@State var tabSelection = 0
@State private var vm = ViewModel()
var body: some View {
TabView(selection: $tabSelection) {
MasterView(vm: vm).tabItem({
Text("Master")
}).tag(0)
OtherView().tabItem({
Text("Other")
}).tag(1)
}
}
}
struct MasterView: View {
@ObservedObject var vm: ViewModel
var body: some View {
NavigationView {
List(vm.toDoList, id: \.self) { toDo in
NavigationLink(destination: DetailView(vm: vm)) {
Text(toDo)
}
}
}
.onAppear {
vm.getList()
}
}
}
struct DetailView: View {
@ObservedObject var vm: ViewModel
var body: some View {
Text(vm.toDoItem)
.onAppear {
vm.getDetail()
}
}
}
class ViewModel: ObservableObject {
@Published var toDoList: [String] = []
@Published var toDoItem: String = ""
func getList() {
toDoList = ["a", "b", "c"]
}
func getDetail() {
// do some stuffs
toDoItem = "A"
}
}