![](/img/trans.png)
[英]SwiftUI iOS 14 View does not Update @Published Array with @EnvironmentObject
[英]SwiftUI - EnvironmentObject Published var to NavigationLink's Selection?
我有一個 class 我用作 EnvironmentObject 和一個screen
變量,我想用它來控制用戶所在的屏幕。我使用網絡調用來更改這個值,過期秒數移動到另一個視圖,所以我需要我的 NavigationView 移動到此值更改時的適當屏幕。
對於 class 我有這樣的東西:
class MyClass: NSObject, ObservableObject {
@Published var screen: String? = "main"
}
對於主要觀點,我有這樣的事情:
struct ContentView: View {
@EnvironmentObject var myClass: MyClass
var body: some View {
ZStack {
NavigationView() {
NavigationLink(destination: MainView(), tag: "main", selection: self.$myClass.screen)
{
EmptyView()
}
}
}
}
}
我似乎無法以這種方式工作。
作為一種解決方法,我已經做了:
struct ContentView: View {
@EnvironmentObject var myClass: MyClass
var body: some View {
VStack {
if (self.myClass.screen == "main") {
MainView()
} else if (self.myClass.screen == "detail") {
DetailView()
}
}
}
但如你所見,並不漂亮。 而且我在更換屏幕時沒有任何動畫。
有誰知道如何做到這一點或我應該如何處理這種情況?
你的第二種方法是正確的。 你只需要動畫。 不幸的是,它們僅在更改@State
變量時才有效。
為此,您需要創建一個新的@State
變量並將其分配給.onReceive
:
struct ContentView: View {
@EnvironmentObject var myClass: MyClass
@State var screen: String?
var body: some View {
VStack {
if screen == "main" {
MainView()
} else if screen == "detail" {
DetailView()
}
}
.onReceive(myClass.$screen) { screen in
withAnimation {
self.screen = screen
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.