簡體   English   中英

SwiftUI - EnvironmentObject 已發布 var 到 NavigationLink 的選擇?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM