SWIFTUI. Как навсегда изменить цвет кнопок после нажатия? - PullRequest
0 голосов
/ 27 октября 2019

Я создаю приложение для викторины. Вопрос;3 ответа. Ответы в отдельных кнопках.

Мне удалось изменить цвет кнопок при нажатии. Например, от серого до зеленого / красного. Но после нажатия кнопка снова становится серой.

Есть ли способ сохранить измененные цвета после щелчка, как гиперссылка в HTML?

Это код стиля:

struct MyButtonStyle: ButtonStyle {

  func makeBody(configuration: Self.Configuration) -> some View {
    configuration.label
      .padding(20)
      .foregroundColor(.white)
      .background(configuration.isPressed ? Color.red : Color.gray)
      .cornerRadius(10.0)

Ответы [ 2 ]

0 голосов
/ 28 октября 2019

Вы можете объявить свой ButtonStyle следующим образом:

public struct SelectedButtonStyle: ButtonStyle {

    @Binding var isSelected: Bool

    public func makeBody(configuration: Self.Configuration) -> some View {
        configuration.label
            .padding(20)
            .foregroundColor(.white)
            .background(isSelected ? Color.red : Color.gray)
            .cornerRadius(10.0)
    }
}

, а затем в представлении указать состояние для выбора:

@State var isSelected = false

, а затем вы можете либо объявить свою кнопкунапример, чтобы он был выбран один раз и навсегда остался выбранным:

Button("Tap") {
    self.isSelected = true
}   .buttonStyle(SelectedButtonStyle(isSelected: $isSelected))

или вы можете объявить его таким образом, чтобы иметь возможность отменить его выбор:

Button("Tap") {
    self.isSelected.toggle()
}   .buttonStyle(SelectedButtonStyle(isSelected: $isSelected))
0 голосов
/ 27 октября 2019

попробуйте что-то подобное, как только isPressed станет true, оно больше не станет ложным, поэтому кнопка останется серой

struct ContentView: View {

   @State private var isPressed = false

    var body: some View {
        Button(action: {
            self.isPressed = true
        }, label: {
            Text("Button").accentColor(isPressed ? Color.gray : Color.blue)
        })
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...