SwiftUI:如何更改警报按钮中的颜色?

时间:2020-09-13 20:18:03

标签: swift xcode swiftui

我是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")
                  }
                )
            )
        })
    }
}

}

2 个答案:

答案 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。