【问题标题】:How to allow reordering of rows in a SwiftUI List whist NOT in edit mode?如何允许对不在编辑模式下的 SwiftUI 列表中的行进行重新排序?
【发布时间】:2019-11-08 11:25:15
【问题描述】:

是否允许对不在编辑模式下的 SwiftUI 列表中的行进行重新排序?

那是给行一个右手边的汉堡菜单图标,他们可以用它来重新排列一行? (就像在编辑模式下可能的那样)

【问题讨论】:

    标签: swiftui swiftui-list


    【解决方案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 中?
    猜你喜欢
    • 2015-12-23
    • 2015-10-22
    • 2020-04-15
    • 2021-07-29
    • 1970-01-01
    • 2011-07-18
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多