SwiftUI - 使用“ObservableObject”和@EnvironmentObject 有条件地显示视图

2024-05-25

我想在我的应用程序中有条件地显示不同的视图 - 如果某个布尔值为 true,则将显示一个视图。如果为 false,将显示不同的视图。该布尔值位于 ObservableObject 类中,并根据将要显示的视图之一进行更改。

PracticeStatus.swift(父视图)

import Foundation
import SwiftUI
import Combine

class PracticeStatus: ObservableObject  {
    @Published var showResults:Bool = false
}

PracticeView.swift(父视图)

struct PracticeView: View {
    @EnvironmentObject var practiceStatus: PracticeStatus

    var body: some View {
        VStack {
            if practiceStatus.showResults {
                ResultView()
            } else {
                QuestionView().environmentObject(PracticeStatus())
            }
        }
    }
}

QuestionView.swift

struct QuestionView: View {
    @EnvironmentObject var practiceStatus: PracticeStatus

    var body: some View {
        VStack {
            ...
            Button(action: {
                self.practiceStatus.showResults = true
            }) { ... }
            ...
        }
    }
}

但是,这段代码不起作用。当按钮内QuestionView按下后,不会显示 ResultView。有人有解决办法吗?谢谢!


您是否尝试过编译您的代码?有几个基本错误:

  1. 多变的practice不存在于PracticeView。你的意思practiceStatus?
  2. 多变的userData不存在于QuestionView。你的意思practiceStatus?
  3. 你正在呼唤PracticeView从内部PracticeView!你肯定会遇到堆栈溢出;-) 你不是说吗QuestionView?

下面是一个工作代码:

import Foundation
import SwiftUI
import Combine

class PracticeStatus: ObservableObject  {
    @Published var showResults:Bool = false
}

struct ContentView: View {
    @State private var flag = false

    var body: some View {
        PracticeView().environmentObject(PracticeStatus())
    }
}

struct PracticeView: View {
    @EnvironmentObject var practiceStatus: PracticeStatus

    var body: some View {
        VStack {
            if practiceStatus.showResults {
                ResultView()
            } else {
                QuestionView()
            }
        }
    }
}

struct QuestionView: View {
    @EnvironmentObject var practiceStatus: PracticeStatus

    var body: some View {
        VStack {

            Button(action: {
                self.practiceStatus.showResults = true
            }) {
                Text("button")
            }
        }
    }
}

struct ResultView: View {
    @State private var flag = false

    var body: some View {
        Text("RESULTS")
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SwiftUI - 使用“ObservableObject”和@EnvironmentObject 有条件地显示视图 的相关文章

随机推荐