在SwiftUI的列表行(TableviewCell)中单击按钮导航到详细视图



我有列表/TableView与单元格。现在每个单元格包含关于给定项目的详细信息和一些按钮,如编辑项目,显示项目的详细信息,显示给定项目的子视图等。

现在,为了显示Item的详细信息,我尝试添加NavigationLink,但现在如果任何人单击该单元格上的任何地方,它将移动到详细信息屏幕。

我不想移动到细节屏幕上点击屏幕的任何地方,我想推细节屏幕只有当有人点击"显示细节"按钮。

  1. navigationLink上使用.hidden()修饰符来防止列表项捕获它的动作

  2. .buttonStyleautomatic更改为其他列表项上防止它捕获按钮动作。(例如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()
}
}

最新更新