首先,我想说的是值更新,当我在控制台中打印值时,每个选项都能按预期输出。但为了UI效果,我添加了一些视觉组件/样式来帮助指示当前选择。
我的枚举:
这是我在实际视图中声明/使用这些组件的方式:
我不确定是不是ForEach循环,但它同时打印传递的相应案例。我在可以使用@State的地方更新视图,但没有成功。任何帮助将不胜感激!
我的枚举:
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的地方更新视图,但没有成功。任何帮助将不胜感激!