[英]SwiftUI NavigationLink in the list doesn't get the right detail page with 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.