簡體   English   中英

SwiftUI - 使用'ObservableObject' 和@EnvironmentObject 有條件地顯示視圖

[英]SwiftUI - Using 'ObservableObject' and @EnvironmentObject to Conditionally Display View

我想在我的應用程序中有條件地顯示不同的視圖 - 如果某個布爾值為真,則將顯示一個視圖。 如果為 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. PracticeView中不存在變量practice 你的意思是practiceStatus嗎?
  2. QuestionView中不存在變量userData 你的意思是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")
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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