SwiftUI:如何更改警报按钮和 NavigationLink 后退按钮的颜色?

lul*_*a08 5 swift swiftui

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

\n

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

\n

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

\n
struct ContentView: View {\n    \n    @State var showSheet = false\n    @State var alertShouldBeShown = !UserDefaults.standard.bool(forKey: "\xc2\xa3Start")\n\n    var body: some View {\n        Button(action:  {\n            self.showSheet.toggle()\n        }) {\n            Text("click me")\n            //.accentColor(colorScheme == .dark ? Image("") : Image("Info-Icon"))\n        }.sheet(isPresented: $showSheet) {\n            SheetView(showSheet: self.$showSheet)\n        }\n        .alert(isPresented: $alertShouldBeShown, content: {\n\n            Alert(title: Text("Headline"),\n                message: Text("Text"),\n                dismissButton: Alert.Button.default(\n                    Text("Ok"), action: {\n                    UserDefaults.standard.set(true, forKey: "Start")\n                    }\n                )\n            )\n        })\n    }\n}\n\nstruct SheetView: View {\n    @Binding var showSheet: Bool\n    var body: some View {\n        NavigationView {\n            DetailView()\n                .navigationBarTitle(Text("Headline"), displayMode: .inline)\n                .navigationBarItems(trailing: Button(action: {\n                    self.showSheet = false\n                }) {\n                    Text("Done")\n                        .bold()\n            })\n        }.navigationViewStyle(StackNavigationViewStyle())\n    }\n}\n\nstruct DetailView: View {\n    var body: some View {\n        List {\n            HStack {\n                NavigationLink(destination: DetailViewOne()) {\n                                    Text("View 1")\n                }\n            }\n            HStack {\n                NavigationLink(destination: DetailViewTwo()) {\n                                    Text("View 2")\n                }\n            }\n        }\n    }\n}\n\nstruct DetailViewOne: View {\n    var body: some View {\n        Text("1")\n    }\n}\n\nstruct DetailViewTwo: View {\n    var body: some View {\n        Text("2")\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

paw*_*222 15

您可以使用以下方法更改导航栏强调色accentColor,但需要将其应用到SheetView(给定环境的根视图):

SheetView(showSheet: self.$showSheet)
    .accentColor(.red)
Run Code Online (Sandbox Code Playgroud)

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

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

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

UIView.appearance(whenContainedInInstancesOf: [UIAlertController.self]).tintColor = .red
Run Code Online (Sandbox Code Playgroud)