在SwiftUI中使用List时,如何使用NavigationLink isActive绑定?

时间:2020-07-31 18:14:34

标签: ios swift swiftui swiftui-list swiftui-navigationlink

用例非常简单。我有一个地方列表,每个地方都对应一个地理围栏。我需要在用户所在的地理围栏的特定行中启用导航。并且列表是动态的,并且是从API获取的。关于Stackoverflow也有类似的问题,但这些仅解决静态列表。

我尝试使用bool字典,但无法使其工作。

这是简化的模拟代码:

template<typename T>
concept Matrix = requires (T a, int b, int c) { 
    {a(b, c)} -> std::convertible_to<double>;
    {a.size1()}->std::convertible_to<size_t>;
    {a.size2()}->std::convertible_to<size_t>;
};

我收到此错误:无法将类型'Binding '的值转换为预期的参数类型'Binding ' 在NavigationLink的isActive参数上。

注意:在接收带有onRecieve修饰符的allItem时,我已经在键值对中填充了navActive字典

1 个答案:

答案 0 :(得分:4)

这是针对您的用例的一种可能的方法

struct ListView: View {
    
    // ... your view model defined here

    @State private var selectedItem: UUID? = nil
    var body: some View {

        List (viewModel.allItems, id: \.id) { item in
            Text(item.name)
                .onTapGesture {
                    self.selectedItem = item.id
                }
                .background(
                    NavigationLink(destination: DetailView(item), tag: item.id,
                        selection: $selectedItem) { EmptyView() }
                        .buttonStyle(PlainButtonStyle())
                )
        }
    }
}