我正在尝试创建一些功能,其中应用程序的重音颜色根据用户使用颜色选择器选择的内容而变化。
这是我的代码:
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
中选择一种颜色后,整个应用的重音颜色立即发生变化。但这并没有发生。相反,只有在我关闭应用并重新启动它后,它才会发生变化。我如何才能使这种变化立即发生呢?
任何帮助都将不胜感激。
1条答案
按热度按时间tp5buhyn1#
要使其与SwiftUI和环境对象一起正常工作,您需要将
selectedColor
声明为@StateObject