简体   繁体   English

SwiftUI 更改滚动视图内按钮的背景颜色

[英]SwiftUI change background color of a button inside a scrollview

am trying to change the color of the button according to the isSelected state but not working我正在尝试根据 isSelected 状态更改按钮的颜色但不起作用

struct Box: Identifiable  {
    var id: Int
    var title: String
    @State var isSelected: Bool
}

struct BoxView: View {
    var box: Box
    var body: some View{
        Button(action: {
            self.box.isSelected.toggle()
        }){
            Text(box.title)
                .foregroundColor(.white)
        }
    .frame(width: 130, height: 50)
        .background(self.box.isSelected ? Color.red : Color.blue)
    .cornerRadius(25)
    .shadow(radius: 10)
    .padding(10)

    }
}

Try this way.试试这个方法。

struct Box: Identifiable  {
    var id: Int
    var title: String
}

struct BoxView: View {

    var box: Box

    @State var selectedBtn: Int = 1

    var body: some View {
        ForEach((1...10).reversed(), id: \.self) { item in
            Button(action: {
                self.selectedBtn = item
            }){
                Text(self.box.title)
                    .foregroundColor(.white)
            }
            .frame(width: 130, height: 50)
            .background(self.selectedBtn == item ? Color.red : Color.blue)
            .cornerRadius(25)
            .shadow(radius: 10)
            .padding(10)
        }
    }
}

you can also observe when value change like this way.您还可以观察值何时以这种方式变化。

class Box: ObservableObject {
    let objectWillChange = ObservableObjectPublisher()
    var isSelected = false { willSet { objectWillChange.send() } }
}

    struct ContentView: View {
    @ObservedObject var box = Box()
    var body: some View {
        VStack{
            Button(action: {
                self.box.isSelected.toggle()
            }){
                Text("tap")
                    .foregroundColor(.white)
            }
            .background(box.isSelected ?? false ? Color.red : Color.blue)
            .cornerRadius(25)
            .shadow(radius: 10)
            .padding(10)
        }
    }
}

You can change Button background Color on click using below code您可以使用以下代码在单击时更改Button背景Color

struct ContentView: View {

    @State var isSelected : Bool = false
    var body: some View {

        VStack {
            Button(action: {
                self.isSelected.toggle()
            }){
                Text("State")
                    .foregroundColor(.white)
            }
            .frame(width: 130, height: 50)
            .background(self.isSelected ? Color.red : Color.blue)
        }
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM