在 SwiftUI 中点击更改按钮背景颜色

Posted

技术标签:

【中文标题】在 SwiftUI 中点击更改按钮背景颜色【英文标题】:Change button background colour on tap in SwiftUI 【发布时间】:2019-09-05 04:36:19 【问题描述】:

我正在尝试在 SwiftUI 中更改我的 Button 的颜色。 这是我的整个 CustomButton 视图结构:

struct CustomButton: View 

    @State private var didTap:Bool = false

    var body: some View 
        Button(action: 
            self.didTap = true
        ) 

        Text("My custom button")
            .font(.system(size: 24))
        
        .frame(width: 300, height: 75, alignment: .center)
        .padding(.all, 20)
        .background(Color.yellow)

        //My code above this comment works fine

        //I tried something like this, but it is not working
     //   if didTap == true 
     //   .background(Color.blue)
     //    

    

这就是我的按钮的样子(很好):

但我的问题是:如何在用户点击此按钮时更改背景颜色。

谢谢。

【问题讨论】:

【参考方案1】:

为此,您需要根据更改的状态指定颜色:

struct CustomButton: View 

@State private var didTap:Bool = false

  var body: some View 
    Button(action: 
        self.didTap = true
    ) 

    Text("My custom button")
        .font(.system(size: 24))
    
    .frame(width: 300, height: 75, alignment: .center)
    .padding(.all, 20)
    .background(didTap ? Color.blue : Color.yellow)
  

PS:如果你也想管理其他州,那么你可以去enum

【讨论】:

点击后有没有办法重置颜色? @pizzae 而不是 self.didTap = true 使用 self.didTap.toggle() 然后它会在每次点击时来回切换。 @jwknz 这是否意味着您必须再次点击它,即总共点击 2 次才能获得原始颜色?有没有办法让它在点击后立即改变颜色? @pizzae 好吧,除非您将该颜色设置为 false 值,否则它不会变回原始颜色 - 所以是的,这将是 2 次点击。如果您希望它在一段时间后变回,那么您可以使用计时器并在几秒钟后将其设置回来,或者您希望它实现的任何目标。【参考方案2】:

以防万一有人想要不同的方式来做这件事。 它适用于更多颜色。

struct CustomButton: View 

    @State private var buttonBackColor:Color = .yellow

    var body: some View 
        Button(action: 

            //This changes colors to three different colors.
            //Just in case you wanted more than two colors.
             if (self.buttonBackColor == .yellow) 
                 self.buttonBackColor = .blue
              else if self.buttonBackColor == .blue 
                 self.buttonBackColor = .green
              else 
                 self.buttonBackColor = .yellow
             

            //Same code using switch
            /*
             switch self.buttonBackColor 
             case .yellow:
                 self.buttonBackColor = .blue
             case .blue:
                 self.buttonBackColor = .green
             default:
                 self.buttonBackColor = .yellow
             
             */
        ) 

        Text("My custom button")
            .font(.system(size: 24))
        
        .frame(width: 300, height: 75, alignment: .center)
        .padding(.all, 20)
        .background(buttonBackColor)
    

【讨论】:

【参考方案3】:

但是在新的 Ways 中,或者在新版本的 Swift、Xcode 和 ios 中,你只需要写 .color_name,如果你像上面一样使用 class,那么它会产生错误。

在 Struct 类中只需添加 ContentView: View:

@State private var didTap:Bool = false

Button(action:
    self.didTap = true
) 
    Text("ಕನ್ನಡ").font(.system(size: 17))
        .fontWeight(.bold)
        .foregroundColor(didTap ? .orange :.black)
        .frame(minWidth: 0, maxWidth:143)
        .padding()
        .background(
            RoundedRectangle(cornerRadius: 10)
                .fill(Color.white)
                .shadow(color: .gray, radius: 2, x: 0, y: 2)
        )

【讨论】:

以上是关于在 SwiftUI 中点击更改按钮背景颜色的主要内容,如果未能解决你的问题,请参考以下文章

在swift UI中点击按钮时如何更改背景颜色和图像?

在 SwiftUI 中更改 UIView 背景颜色

在 SwiftUI 中更改 GroupBox 背景颜色

如何在 SwiftUI 中更改表单的背景颜色?

SwiftUI 更改内联 navigationBarTitleDisplayMode 的导航栏背景颜色

有没有办法在 SwiftUI 中更改列表的背景颜色? 2020 (iOS 14)