NavigationLink 内的 SwiftUI 按钮

标签 swiftui

我有一个列表项 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/

相关文章:

ios - SwiftUI - 数据源为空时动态列表过滤动画飞到右侧

colors - SwiftUI:使用 Assets 目录中的颜色集

swift - 如何在struct中实现func计算?

ios - 如何在 swiftui 中通过代码或自定义类显示警报

core-data - fetchUserRecordID Cloudkit 错误 : Couldn't get container configuration

macos - 如何在 SwiftUI 生命周期中显示 NSPopover?

swift - 如何摆脱 SwiftUI TextFields 周围的蓝色选择边框?

swift - 如何使 SwiftUI 列表自动滚动?

SwiftUI OnDrop 函数取决于条件

text - 在 SwiftUI 中减少文本的行距