Как изменить цвет границы кнопки при нажатии в SwiftUI

#swiftui

#swiftui

Вопрос:

Мне нужно отобразить 3 кнопки подряд с цветом границы кнопки по умолчанию (скажем, зеленым). И в зависимости от того, какая кнопка из трех нажата, мне нужно изменить цвет ее границы (на красный), чтобы выделить эту кнопку. SwiftUI не позволяет передавать объект кнопки (self) в обработчике действий (например, «отправитель» в Swift). Есть ли способ переключить границу всех трех кнопок, в зависимости от того, какая из них выбрана?

 HStack {
    Button(action: {
        border(Color.red, width: 1)    // This doesn't work
    }
    , label: {
        Text("Option 1")
    }).border(Color.green, width: 1)

    Button(action: {
        border(Color.red, width: 1)    
    }
    , label: {
        Text("Option 2")
    }).border(Color.green, width: 1)

    Button(action: {
        border(Color.red, width: 1)    
    }
    , label: {
        Text("Option 3")
    }).border(Color.green, width: 1)

}
  

Ответ №1:

Решение должно выглядеть примерно так:

 @State var selectedButton: Int = 1

var body: some View {
    HStack {
        Button(action: {
            selectedButton = 1
        }
        , label: {
            Text("Option 2")
        })
        .border(selectedButton == 1 ? Color.red : Color.green, width: 1)

        Button(action: {
            selectedButton = 2
        }
        , label: {
            Text("Option 2")
        })
        .border(selectedButton == 2 ? Color.red : Color.green, width: 1)

        Button(action: {
            selectedButton = 3
        }
        , label: {
            Text("Option 3")
        })
        .border(selectedButton == 3 ? Color.red : Color.green, width: 1)

    }
}