Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios LazyVGrid中的SwiftUI NavigationLink拾取随机索引_Ios_Swift_Swiftui - Fatal编程技术网

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)
                }

非常感谢。这件事让我的脑子嗡嗡响了好几个小时。