繁体   English   中英

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

[英]How does one use NavigationLink isActive binding when working with List in SwiftUI?

用例非常简单。 我有一个地点列表,每个地点对应一个地理围栏。 我需要在用户所在地理围栏的特定行中启用导航。 该列表是动态的,从 API 中获取。 Stackoverflow 上有类似的问题,但这些问题仅针对 static 列表。

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

这是一个简化的模拟代码:

struct ListView: View {
  @State private var navActive: [UUID: Bool] = [:]
  var body: some View {
    
           List (viewModel.allItems, id: \.id) { item in
           NavigationLink(destination: DetailView(item), isActive: $navActive[item.id]) {
             Text(item.name)
             .onTapGesture {
                if currentLocation.isInside(item.geofence) { navActive[item.id] = true }
             }
         }
      }
   }
}

我收到此错误:无法将 NavigationLink isActive 参数上的“Binding<Bool?>”类型的值转换为预期的参数类型“Binding<Bool>”

注意:我在使用 onRecieve 修饰符接收 allItems 时使用键值对填充了 navActive 字典

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM