Ios LazyVGrid中的SwiftUI NavigationLink拾取随机索引
每次选择一行时,系统决定将随机索引转发到下一个视图 请看以下视频进行澄清: 代码如下:Ios LazyVGrid中的SwiftUI NavigationLink拾取随机索引,ios,swift,swiftui,Ios,Swift,Swiftui,每次选择一行时,系统决定将随机索引转发到下一个视图 请看以下视频进行澄清: 代码如下: struct TestView:View{ 让列=[ GridItem(.flexible()) ] @状态变量showDetail=false var body:一些观点{ 滚动视图{ LazyVGrid(列:列,间距:20){ ForEach(1…10,id:\.self){index in 文本(“\(索引)”) .background(导航链接(目的地:TestDetail(索引:index),is
struct TestView:View{
让列=[
GridItem(.flexible())
]
@状态变量showDetail=false
var body:一些观点{
滚动视图{
LazyVGrid(列:列,间距:20){
ForEach(1…10,id:\.self){index in
文本(“\(索引)”)
.background(导航链接(目的地:TestDetail(索引:index),isActive:$showtail){
EmptyView()
}).ontapsigne{
showDetail=true
}
}
}
}
}
}
结构测试视图\u预览:PreviewProvider{
静态var预览:一些视图{
TestView()
}
}
结构TestDetail:视图{
var指数:Int
var body:一些观点{
文本(“\(索引)”)
}
}
一次激活所有链接(因为所有链接都取决于一种状态)。相反,对于这种情况,我们需要使用不同的NavigationLink
构造函数
这是一个固定变量。使用Xcode 12.1/iOS 14.1进行测试
struct TestView: View {
let columns = [
GridItem(.flexible())
]
@State var selectedItem: Int?
var body: some View {
ScrollView {
LazyVGrid(columns: columns, spacing: 20) {
ForEach(1...10, id: \.self) { index in
Text("\(index)")
.background(NavigationLink(destination: TestDetail(index: index), tag: index, selection: $selectedItem) {
EmptyView()
}).onTapGesture {
selectedItem = index
}
}
}
}
}
}
您应该使用标准的NavigationLink功能,它会自动将其转换为一个按钮-您实际上不需要.background和.ontaps手势
ForEach(1...10, id: \.self) { index in
NavigationLink(
destination: TestDetail(index: index),
label: {
Text("\(index)")
})
.accentColor(.primary)
}
非常感谢。这件事让我的脑子嗡嗡响了好几个小时。