swift 尝试使用@AppStorage更改应用程序的重音颜色时,直到我重新启动应用程序后才会进行任何更改

sirbozc5  于 2022-12-17  发布在  Swift
关注(0)|答案(1)|浏览(110)

我正在尝试创建一些功能,其中应用程序的重音颜色根据用户使用颜色选择器选择的内容而变化。
这是我的代码:

import SwiftUI

class ColorStorage: ObservableObject {
    @AppStorage("someColor") var someColor: Color = .blue
}

@main
struct PocketIslamApp: App {
    var selectedColor = ColorStorage()
    
    var body: some Scene {
        WindowGroup {
            TesterView()
                .environmentObject(selectedColor)
                .accentColor(selectedColor.someColor)
        }
    }
}

struct TesterView: View {
    var body: some View {
        NavigationView {
            NavigationLink(destination: TesterView2()) {
                Text("Click Me")
            }
        }
    }
}

struct TesterView2: View {
    
    @EnvironmentObject var selectedColor: ColorStorage
    
    var body: some View {
        ColorPicker("Pick a Color", selection: $selectedColor.someColor)
    }
}

FYI我能够将Color@AppStorage一起使用,因为我从this Stack Overflow answer中取出了一个扩展。
这个项目的想法是,我希望在用户从ColorPicker中选择一种颜色后,整个应用的重音颜色立即发生变化。但这并没有发生。相反,只有在我关闭应用并重新启动它后,它才会发生变化。我如何才能使这种变化立即发生呢?
任何帮助都将不胜感激。

tp5buhyn

tp5buhyn1#

要使其与SwiftUI和环境对象一起正常工作,您需要将selectedColor声明为@StateObject

@StateObject var selectedColor = ColorStorage()

相关问题