如何允许对不在编辑模式下的 SwiftUI 列表中的行进行重新排序?
Posted
技术标签:
【中文标题】如何允许对不在编辑模式下的 SwiftUI 列表中的行进行重新排序?【英文标题】:How to allow reordering of rows in a SwiftUI List whist NOT in edit mode? 【发布时间】:2019-11-08 11:25:15 【问题描述】:是否允许对不在编辑模式下的 SwiftUI 列表中的行进行重新排序?
那是给行一个右手边的汉堡菜单图标,他们可以用它来重新排列一行? (就像在编辑模式下可能的那样)
【问题讨论】:
【参考方案1】:如果我正确理解了您的问题,可以这样做:
import SwiftUI
struct TestEditModeCustomRelocate: View
@State private var objects = ["1", "2", "3"]
@State var editMode: EditMode = .active
var body: some View
List
ForEach(objects, id: \.self) object in
Text("Row \(object)")
.onMove(perform: relocate)
.environment(\.editMode, $editMode)
func relocate(from source: IndexSet, to destination: Int)
objects.move(fromOffsets: source, toOffset: destination)
struct TestEditModeCustomRelocate_Previews: PreviewProvider
static var previews: some View
TestEditModeCustomRelocate()
【讨论】:
嗨 - 我认为这是有效的,因为它在编辑模式下是正确的,我正在寻找一种允许一个总是重新排序的方法,所以一种在不编辑时让“onMove”工作的方法模式... EditMode 只是一个状态值,您需要将其设置为本地列表具有行重新排序样式。这些东西是依赖的,没有第一 - 没有第二。另一种方法是编写完全自定义的类似列表的视图。 好的,谢谢 - 所以基本上不可能 - 很高兴知道。我非常喜欢 GoApps (apps.apple.com/us/app/gotasks/id389113399),它的设置就像我所指的那样,并且想知道如何获得它。这样做的 DIY 列表将非常棘手,必须手动拖放事件等? 据我所知,GoApps 使用由“编辑”按钮激活的标准重新排序。如果这是您想要的,那就更简单了 - 只需在任何地方添加 EditButton()。 在 GoApps 的列表视图中,他们似乎设法不显示删除按钮(这是我希望避免的)并将其替换为复选框 - 不确定这是否可能在 SwiftUI 中?以上是关于如何允许对不在编辑模式下的 SwiftUI 列表中的行进行重新排序?的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI - 如何在编辑模式下避免列表中的行缩进,但不使用 onDelete? (附代码/视频)