我正在练习一个应用程序,其中菜单的一部分是水平可滚动列表,一个小圆圈应突出显示当前选择。代码如下:
import SwiftUI
struct ContentView: View {
@State var index = 0
var body: some View {
ScrollView(.horizontal, showsIndicators:false) {
HStack(spacing: 30) {
ForEach(0..<topMenu.count, id: \.self){ menu in
TopMenu(menu: menu, index: $index)
}
}
}
}
}
var topMenu = ["Shoes", "Clothing", "By Sports", "By Brand", "By Price"]
struct TopMenu: View {
var menu: Int
@Binding var index: Int
var body: some View {
VStack(spacing: 8) {
Text(topMenu[menu])
.font(.system(size: 15))
.fontWeight(index == menu ? .bold : .none)
.foregroundColor(index == menu ? .black : .gray)
Circle()
.fill(Color.black)
.frame(width: 10, height: 10)
.opacity(index == menu ? 1 : 0)
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
但是现在这一切似乎都是静态的,我似乎无法弄清楚如何更改@Binding
变量的值,以便它显示topMenu[]
中当前的项目选择?
答案 0 :(得分:1)
我假设您要更改水龙头的选择,可以按照以下步骤进行操作
VStack(spacing: 8) {
Text(topMenu[menu])
.font(.system(size: 15))
.fontWeight(index == menu ? .bold : .none)
.foregroundColor(index == menu ? .black : .gray)
.onTapGesture {
index = menu // << here !!
}