SwiftUI-EnvironmentObject已发布到NavigationLink选择的变量?

问题描述 投票:0回答:1

[我有一个类,用作带有screen变量的EnvironmentObject,我想使用它来控制用户所在的屏幕。我使用网络调用来更改此值,将到期秒数移至另一个视图,所以我需要当该值更改时,将NavigationView移至适当的屏幕。

对于这个班,我有这样的事情:

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()
         }
      }
   }

但是如您所见,并不漂亮。而且在切换屏幕时我没有任何动画。

有人知道如何执行此操作或应该如何处理这种情况?

ios swift swiftui navigationview swiftui-navigationlink
1个回答
0
投票
我认为使用NavigationLink比第二种解决方案更能解决问题。

或者您可以使用AnyView

var body: some View { VStack { content } }

var content: AnyView {
    switch myClass.screen {
        case "main":
            return AnyView(MainView())
        default:
            return AnyView(DetailView())
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.