【发布时间】:2020-12-26 14:50:12
【问题描述】:
首先,我想说的是值更新,因为我在控制台中打印值,并且确定,点击每个选项都会按预期打印。但是,出于 UI 目的,我添加了一些视觉组件/样式来帮助指示当前选择。
我的枚举:
enum Gender : Int, CaseIterable {
case men = 0
case women = 1
private var cases: [String] {
["Men", "Women"]
}
func toString() -> String {
cases[self.rawValue]
}
}
这是有助于显示数据和索引数据的逻辑的视图
struct GenderTabMenuIndicator: View {
var category: Gender
var body: some View {
HStack {
ForEach(0..<Gender.allCases.count) { cat in
GenderTabMenuIndicatorItem(category: Gender.allCases[cat], isActive: Gender.allCases[cat] == category)
}
}.frame(width: UIScreen.main.bounds.width * 0.75)
}
}
这只是视图。但是,isActive 似乎并没有从初始选择/值切换。
struct GenderTabMenuIndicatorItem: View {
@State var category: Gender
@State var isActive: Bool
var body: some View {
VStack(spacing: 0) {
Text(category.toString().uppercased())
.onTapGesture {
print("tapped")
print(category.toString())
}
.font(.system(size: 18, weight: isActive ? .bold : .light))
.frame(maxWidth: .infinity)
.layoutPriority(1)
if isActive {
Rectangle()
.frame(width: 50, height: 2, alignment: .center)
}
}.foregroundColor(Color(SYSTEM_FONT_COLOUR))
}
}
这就是我在实际视图中声明/使用所有这些组件的方式:
@State private var selected_tab: Gender = .men
VStack {
GenderTabMenuIndicator(category: selected_tab)
}
我不知道它是否是 ForEach 循环,但它同时打印了通过的相应案例。我在可以更新视图的地方使用了@State,但没有成功。
任何帮助将不胜感激!
【问题讨论】: