我是SwiftUI的新手,如果激活了暗模式,我将通过警报中的“接受”按钮更改颜色。浅色模式下按钮的颜色应与深色模式下按钮的颜色不同。
struct ContentView: View {
@State var alertShouldBeShown = !UserDefaults.standard.bool(forKey: "FirstStart")
var body: some View {
VStack {
Text("Hello World!")
.alert(isPresented: $alertShouldBeShown, content: {
Alert(title: Text("Disclaimer"),
message: Text("Placeholder"),
dismissButton: Alert.Button.default(
Text("Accept"), action: {
UserDefaults.standard.set(true, forKey: "FirstStart")
}
)
)
})
}
}
}
答案 0 :(得分:2)
AFAIK您无法更改内置Alert
上的文本和颜色。您将创建自己的自定义警报。
例如:
struct ContentView: View {
@State private var showAlert = false
var body: some View {
ZStack {
Button(action: { showAlert = true }) {
Text("Press")
}
if showAlert {
Color.black
.opacity(0.1)
CustomAlert(isPresented: $showAlert, title: "Disclaimer", bodyText: "Placeholder", buttonText: "Accept")
}
}
}
}
struct CustomAlert: View {
@Environment(\.colorScheme) private var colorScheme
@Binding var isPresented: Bool
var title: String
var bodyText: String
var buttonText: String
var body: some View {
ZStack {
VStack {
Text(title)
.bold()
Text(bodyText)
Button(action: { self.isPresented = false}) {
Text(buttonText)
.foregroundColor(colorScheme == .light ? .blue : .green)
}
}
.padding(20)
.background(
Color.white
.cornerRadius(10)
)
}
}
}
答案 1 :(得分:2)
警报按钮的颜色基于应用程序的色调/重点颜色。对于深色和浅色模式,此颜色实际上可以是动态的。最简单的方法是在资产目录中定义颜色。
在iOS 14 Beta中,您可以在资产目录中为SwiftUI定义强调色,而无需编写任何其他代码。如果您希望在iOS 13中使用此功能,则应该阅读this文章。如果您要使用资产目录中具有不同亮/暗模式外观的颜色,请使用UIColor(named: "")
API。