У меня месячный обзор по сетке 3х4. Каждое подпредставление представляет собой небольшую коробку с названием месяца и состоянием, выбрано / не выбрано . Проблема в том ... Я хочу наблюдать переменную enum из родительского представления и отменить выбор всех кнопок, кроме последнего нажатого.
На данный момент у меня реализованы следующие логики c. Изначально у меня currentMonthSelected с состоянием .none (месяцы не выбраны) . Когда я нажимаю кнопку JAN , я передаю currentMonthSelected == .jax на Подмножество одного месяца , и он возвращает мне обратный вызов, который изменяет currentMonthSelected, которое должно наблюдать другие представления.
ParentView
@State var currentMonthSelected: MonthsTypes = .none
SingleButtonView(title: .jan, isSelected: currentMonthSelected == .jan ? true : false, action: { month in
self.currentMonthSelected = month
})
SingleButtonView(title: .feb, isSelected: currentMonthSelected == .feb ? true : false, action: { month in
self.currentMonthSelected = month
})
Подмесячный просмотр за месяц
struct SingleButtonView: View {
var title: MonthsTypes = .none
@State var isSelected = false
var action: (MonthsTypes) -> ()
var body: some View {
VStack(spacing: 0){
Button(action: {
self.action(self.title)
}){
Spacer()
Text(title.rawValue.prefix(3))
.font(.Montserrat(weight: isSelected ? .SemiBold : .Regular, size: 16))
.foregroundColor(isSelected ? Color.white : Color.gray)
Spacer()
}
}
.frame(width: 80, height: 40)
.background(isSelected ? Color.white : Color.brand_purple)
}
}