SwiftUI 导航 Link 包含一个按钮
SwiftUI Navigation Link containing a Button
我有一个 SwiftUI 列表,如下所示:
List {
ForEach(items) { item in
NavigationLink(destination: EditItemView(item: item)) {
ItemView(item: item, buttonAction: {
// Do something
})
}
}
其中 ItemView
是:
struct ItemView: View {
var item: Item
let buttonAction: () -> Void
var body: some View {
HStack(alignment: .center) {
Text(item.tile)
.font(.headline)
Spacer()
Button(action: buttonAction,
label: {
Image(systemName: "plus.circle")
})
.padding(.horizontal)
}
}
}
但是,每当我点击按钮时,它不会执行按钮操作,而是转到 EditItemView
,即导航 link 操作。
那么如何让按钮在导航中执行操作 link?
或者,如果这不可能,我怎样才能使点击项目视图执行一个操作而点击按钮执行另一个操作?
这是可能的方法 - 仅更改 ItemView
将默认按钮替换为点击手势(使用 Xcode 12 / iOS 14 测试)
struct ItemView: View {
var item: Int
let buttonAction: () -> Void
var body: some View {
HStack(alignment: .center) {
Text("Item \(item)")
.font(.headline)
Spacer()
Image(systemName: "plus.circle")
.padding(.horizontal).contentShape(Rectangle())
.highPriorityGesture(TapGesture().onEnded(buttonAction))
}
}
}
我有一个 SwiftUI 列表,如下所示:
List {
ForEach(items) { item in
NavigationLink(destination: EditItemView(item: item)) {
ItemView(item: item, buttonAction: {
// Do something
})
}
}
其中 ItemView
是:
struct ItemView: View {
var item: Item
let buttonAction: () -> Void
var body: some View {
HStack(alignment: .center) {
Text(item.tile)
.font(.headline)
Spacer()
Button(action: buttonAction,
label: {
Image(systemName: "plus.circle")
})
.padding(.horizontal)
}
}
}
但是,每当我点击按钮时,它不会执行按钮操作,而是转到 EditItemView
,即导航 link 操作。
那么如何让按钮在导航中执行操作 link?
或者,如果这不可能,我怎样才能使点击项目视图执行一个操作而点击按钮执行另一个操作?
这是可能的方法 - 仅更改 ItemView
将默认按钮替换为点击手势(使用 Xcode 12 / iOS 14 测试)
struct ItemView: View {
var item: Int
let buttonAction: () -> Void
var body: some View {
HStack(alignment: .center) {
Text("Item \(item)")
.font(.headline)
Spacer()
Image(systemName: "plus.circle")
.padding(.horizontal).contentShape(Rectangle())
.highPriorityGesture(TapGesture().onEnded(buttonAction))
}
}
}