Swift UI和ObservableObject对象数据已清除

穆罕默德·伊沙克(Muhammad Ishaq)

我是SWIFT的初学者,现在我面临UI的问题。让我尝试解释我的问题。

我的主视图屏幕数据来自使用Observable对象的Web服务,并且首次加载了该数据。但是,当我尝试打开左侧幻灯片菜单时,打开左侧幻灯片菜单视图时,homeView webservice / observable对象数据只是被清除。为什么我的可观察对象数据为空。让我分享我的代码:

1 .------这是我的main / parentView

struct ContentView: View {

    @EnvironmentObject var viewRouter: ViewRouter

    var body: some View {

        let drag = DragGesture()
            .onEnded {
                if $0.translation.width < -100 {
                    withAnimation {
                        self.viewRouter.showSlideOutMenu = false
                        self.viewRouter.showDepartmentsMenu = false
                        self.viewRouter.showAccountMenu = false
                    }
                }
        }

        return GeometryReader { g in
            ZStack(alignment: .leading) {
                RouteChanger(viewRouter: self._viewRouter)
                if self.viewRouter.showSlideOutMenu {
                    MainMenuView(viewRouter: self._viewRouter)
                        .frame(width: g.size.width/2)
                        .transition(.move(edge: .leading))
                }
            }
            .gesture(drag)
        }
    }
}

2 .-----这是我的RouteChanger视图,用于导航到视图的不同页面。

struct RouteChanger: View {

    @EnvironmentObject var viewRouter: ViewRouter

    var body: some View {
        GeometryReader { g in
            VStack {

                if self.viewRouter.currentPage == "Home" {

                    HomeView()

                    //.modifier(PageSwitchModifier())
                }

            }
        }
    }
}

3 ....这是我正在使用Observable Object的homeView

struct HomeView: View {

    @ObservedObject var homeController =  HomeController()

    var body: some View {

        GeometryReader { g in
            ZStack {
                Color(UIColor.midTown.blue)
                    .edgesIgnoringSafeArea(.top)

                VStack { //whole body

                    if self.homeController.homePageData.CODE == "0" {
                        ImageViewWidget(imageUrl:  (self.homeController.homePageData.DATA?.headerList[0].img_url)!)
                            .frame(minWidth: g.size.width, maxWidth: g.size.width, minHeight: (g.size.width * UIImage(named: "header")!.size.height) / UIImage(named: "header")!.size.width, maxHeight: (g.size.width * UIImage(named: "header")!.size.height) / UIImage(named: "header")!.size.width)
                    }
                    else {
                        Text("Loading...")
                            .foregroundColor(Color.blue)
                            .padding()
                            .frame(width: g.size.width)
                    }
                }
            }
        }
    }
}
他的脾气

EnvironmentObject注入自动所有子视图,你所以相关的部分ContentView应该如下

 ZStack(alignment: .leading) {
    RouteChanger()                               // << here
    if self.viewRouter.showSlideOutMenu {
        MainMenuView()                           // << here
             .frame(width: g.size.width/2)
             .transition(.move(edge: .leading))
     }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章