首页 > 解决方案 > SwiftUI:如何更改警报按钮和 NavigationLink 后退按钮的颜色?

问题描述

如何更改警报中按钮的颜色和 NavigationLink 中的后退按钮?在警报按钮的文本之后设置.accentColor(.init("someColor"))不起作用。在 navigationLink 之后设置.accentColor(.init("someColor"))也不起作用。我能做些什么?

警报按钮: 在此处输入图像描述

NavigationLink 的后退按钮: 在此处输入图像描述

struct ContentView: View {
    
    @State var showSheet = false
    @State var alertShouldBeShown = !UserDefaults.standard.bool(forKey: "£Start")

    var body: some View {
        Button(action:  {
            self.showSheet.toggle()
        }) {
            Text("click me")
            //.accentColor(colorScheme == .dark ? Image("") : Image("Info-Icon"))
        }.sheet(isPresented: $showSheet) {
            SheetView(showSheet: self.$showSheet)
        }
        .alert(isPresented: $alertShouldBeShown, content: {

            Alert(title: Text("Headline"),
                message: Text("Text"),
                dismissButton: Alert.Button.default(
                    Text("Ok"), action: {
                    UserDefaults.standard.set(true, forKey: "Start")
                    }
                )
            )
        })
    }
}

struct SheetView: View {
    @Binding var showSheet: Bool
    var body: some View {
        NavigationView {
            DetailView()
                .navigationBarTitle(Text("Headline"), displayMode: .inline)
                .navigationBarItems(trailing: Button(action: {
                    self.showSheet = false
                }) {
                    Text("Done")
                        .bold()
            })
        }.navigationViewStyle(StackNavigationViewStyle())
    }
}

struct DetailView: View {
    var body: some View {
        List {
            HStack {
                NavigationLink(destination: DetailViewOne()) {
                                    Text("View 1")
                }
            }
            HStack {
                NavigationLink(destination: DetailViewTwo()) {
                                    Text("View 2")
                }
            }
        }
    }
}

struct DetailViewOne: View {
    var body: some View {
        Text("1")
    }
}

struct DetailViewTwo: View {
    var body: some View {
        Text("2")
    }
}

标签: swiftswiftui

解决方案


您可以通过使用更改 NavigationBar 强调色,accentColor但您需要将其应用于SheetView(给定环境的根视图):

SheetView(showSheet: self.$showSheet)
    .accentColor(.red)

不幸的是,到目前为止,SwiftUI 还不允许进行太多Alert自定义。

但是,由于Alert它构建在 UIKit 组件 ( ) 之上,这UIAlertController也意味着您可以更改包含在.UIViewUIAlertController

您可以将此代码放在您的@main App init 或 SceneDelegate 中:

UIView.appearance(whenContainedInInstancesOf: [UIAlertController.self]).tintColor = .red

推荐阅读