gpt4 book ai didi

swiftui - 如何使用 NavigationLink 进行 ListView 滑动操作

转载 作者:行者123 更新时间:2023-12-05 01:53:20 24 4
gpt4 key购买 nike

我想知道如何将 NavigationLink 放入下面代码中的 swipeActions 部分。代码本身编译没有任何问题,但是当我点击“编辑”链接时没有任何反应。我的意图是通过点击“编辑”来显示另一个 View 。谢谢

var body: some View {
List {
ForEach(processes, id: \.id) { process in
NavigationLink(process.name!, destination: MeasurementsView(procID: process.id!, procName: process.name!))
.swipeActions() {
Button("Delete") {
deleteProcess = true
}.tint(.red)
NavigationLink("Edit", destination: ProcessView(procID: process.id!, procName: process.name!)).tint(.blue)
}
}
}
}

最佳答案

它不起作用,因为 swipeActions 上下文在 NavigationView 之外。相反,我们可以根据操作使用相同的 NavigationLink 进行条件导航。

这是一个可能方法的简化演示 - 使目标有条件并使用链接的编程激活。

使用 Xcode 13.2/iOS 15.2 测试

demo

struct ContentView: View {
var body: some View {
NavigationView {
List {
ForEach(0..<2, id: \.id) {
// separate into standalone view for better
// state management
ProcessRowView(process: $0)
}
}
}
}
}

struct ProcessRowView: View {
enum Action {
case view
case edit
}
@State private var isActive = false
@State private var action: Action?
let process: Int

var body: some View {
// by default navigate as-is
NavigationLink("Item: \(process)", destination: destination, isActive: $isActive)
.swipeActions() {
Button("Delete") {

}.tint(.red)
Button("Edit") {
action = .edit // specific action
isActive = true // activate link programmatically
}.tint(.blue)
}
.onChange(of: isActive) {
if !$0 {
action = nil // reset back
}
}
}

@ViewBuilder
private var destination: some View {
// construct destination depending on action
if case .edit = action {
Text("ProcessView")
} else {
// just to demo different type destinations
Color.yellow.overlay(Text("MeasurementsView"))
}
}
}

关于swiftui - 如何使用 NavigationLink 进行 ListView 滑动操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71094825/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com