SwiftUI изменить цвет фона кнопки внутри прокрутки - PullRequest
1 голос
/ 30 января 2020

пытаюсь изменить цвет кнопки в соответствии с состоянием 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)

    }
}

Ответы [ 3 ]

4 голосов
/ 30 января 2020

Попробуйте так.

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)
        }
    }
}
2 голосов
/ 30 января 2020

Вы также можете наблюдать, когда значение изменяется таким образом.

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)
        }
    }
}
1 голос
/ 30 января 2020

Вы можете изменить 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)
        }
    }
}
...