如何使SwiftUI NavigationLink在编辑模式下工作?

如何使SwiftUI NavigationLink在编辑模式下工作?,swiftui,navigationlink,Swiftui,Navigationlink,我有一份物品清单。单击其中一个应将新视图推送到导航堆栈。我注意到,如果列表处于编辑模式,则导航链接不起作用。有办法控制吗?我需要它在编辑模式下工作 List { ForEach(segments) { segment in NavigationLink(destination: EditSegmentView(segment: segment)) { Text(segment.title) } }.onDelete(perf

我有一份物品清单。单击其中一个应将新视图推送到导航堆栈。我注意到,如果列表处于编辑模式,则导航链接不起作用。有办法控制吗?我需要它在编辑模式下工作

List {
    ForEach(segments) { segment in
        NavigationLink(destination: EditSegmentView(segment: segment)) {
            Text(segment.title)
        }
    }.onDelete(perform: onDelete)
     .onMove(perform: onMove)
}.environment(\.editMode, $alwaysTrue)

我现在已经按照我想要的方式工作了。我使用了一个不同的
NavigationLink
初始值设定项,带有
tag
selection
参数。它似乎工作得很好,但我不知道这是否是初始值设定项的预期用途,因为文档非常稀少

@State var segmentSelection: Segment.ID? = nil

var body: some View {
    NavigationView {
        ...
        List {
            ForEach(workout.segments) { segment in
                NavigationLink(destination: EditSegmentView(segment: segment),    
                               tag: segment.id,
                               selection: self.$segmentSelection) {
                                Text(segment.title)
                }
                .onTapGesture(perform: { self.segmentSelection = segment.id })
            }.onDelete(perform: onDelete)
             .onMove(perform: onMove)
        }.environment(\.editMode, Binding.constant(.active))
        ...
    }
}

链接未在编辑模式下工作是预期行为。如果您从用户的角度想象,他们可能不想编辑列表,而无意中导航到他们正在编辑的项目之一。通过将其保持在编辑模式,您实际想要实现的目标是什么?我正在编辑训练中的练习列表。您可以在列表中添加/删除/移动练习,也可以向下钻取以编辑我从UITableView代码移植的特定练习(更改其名称、持续时间等)。我以前以为用户界面还不错。“删除”按钮和“移动”手柄与触发“导航”的“名称”文本是分开的。可以说,您在试图激活编辑模式和允许导航的过程中,正在向上游奋战。你应该找到一种新的方法来实现所需的UI。我将不得不考虑如何重新设计我的应用程序,使其能够像那样工作,但现在我只想将部分应用程序移植到SwiftUI,如果可以的话。我可以接受UI框架的引导,但如果SwiftUI过于严格,我可能不喜欢它。现在,我有一些工作,我只是在一个答案中发布。我不认为这是预期的行为。苹果iOS中的联系人应用程序实现了Rob N试图实现的功能,这一行与选择和标记初始值设定器一起实现了这一功能:.ontapsignature(执行:{self.segmentSelection=segment.id})。也可以使用它来制作自定义选择器。谢谢