【问题标题】:SwiftUI: How can I change the Color of Alert Button and NavigationLink back button?SwiftUI:如何更改警报按钮和 NavigationLink 后退按钮的颜色?
【发布时间】:2020-10-03 15:41:45
【问题描述】:

如何更改警报中按钮的颜色和 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")
    }
}

【问题讨论】:

标签: swift swiftui


【解决方案1】:

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

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

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

但是,由于Alert 构建在 UIKit 组件 (UIAlertController) 之上,这也意味着您可以更改 UIView 包含在 UIAlertController 中时的 外观

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

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

【讨论】:

  • 很好,一个适用于所有 UIKit 和 SwiftUI 警报的单行修复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多