我有一个列表项 View ,该 View 显示有关嵌入到 navigationLink 中的任务的一些基本信息。
我想使用 navigationLink 中的按钮来切换 task.isComplete
而无需进行任何导航。
这是我到目前为止的代码:
var body: some View {
NavigationLink(destination: TaskDetailView()) {
HStack {
RoundedRectangle(cornerRadius: 5)
.frame(width: 15)
.foregroundColor(getColor(task: task))
VStack {
Text(task.name!)
.font(.headline)
Spacer()
}
Spacer()
Button(action: {
self.task.isComplete.toggle()
}) {
if task.isComplete == true {
Image(systemName: "checkmark.circle.fill")
} else {
Image(systemName: "circle")
}
}
.foregroundColor(getColor(task: task))
.font(.system(size: 22))
}
}
}
目前,按钮操作不会执行,因为每当按下按钮时,navigationLink 都会将您带到目标 View 。我尝试将按钮放在 navigationLink 之外 - 这允许执行操作,但导航仍然会发生。
有没有办法让这成为可能?
谢谢。
最佳答案
要达到您想要的结果,您必须在 .onTapGesture 处理程序中使用其他内容,而不是 NavigationLink 上的按钮。下面的例子对我有用。
尝试替换:
Button(action: {
self.task.isComplete.toggle()
}) {
if task.isComplete == true {
Image(systemName: "checkmark.circle.fill")
} else {
Image(systemName: "circle")
}
}
与:
Image(systemName: task.isComplete ? "checkmark.circle.fill" : "circle")
.onTapGesture { self.task.isComplete.toggle() }
关于NavigationLink 内的 SwiftUI 按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59401573/