我有列表/TableView与单元格。现在每个单元格包含关于给定项目的详细信息和一些按钮,如编辑项目,显示项目的详细信息,显示给定项目的子视图等。
现在,为了显示Item的详细信息,我尝试添加NavigationLink
,但现在如果任何人单击该单元格上的任何地方,它将移动到详细信息屏幕。
我不想移动到细节屏幕上点击屏幕的任何地方,我想推细节屏幕只有当有人点击"显示细节"按钮。
-
在
navigationLink
上使用.hidden()
修饰符来防止列表项捕获它的动作 -
将
.buttonStyle
从automatic
更改为其他在列表项上防止它捕获按钮动作。(例如borderless
)
struct ContentView: View {
@State var selectedTag: Int?
var body: some View {
NavigationView {
List(1...10, id: .self) { id in
HStack {
Text("Item (id: id)")
Spacer()
Button("Show detail") { selectedTag = id }
.background(link(id))
}.buttonStyle(.borderless) /// 👈 ⚠️ on the item! **NOT** on the button!!!
}
}
}
func link(id: Int) -> some View {
NavigationLink("",
destination: Text("(id) Selected"),
tag: id,
selection: $selectedTag
).hidden()
}
}