Как разрешить переупорядочение строк в списке SwiftUI List НЕ в режиме редактирования?

Есть ли возможность переупорядочить строки в списке SwiftUI, НЕ в режиме редактирования?

То есть, чтобы дать строкам значок меню гамбургера справа, который они могут использовать для изменения порядка строки? (например, что возможно в режиме редактирования)


person Greg    schedule 08.11.2019    source источник


Ответы (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()
    }
}
person Asperi    schedule 08.11.2019
comment
привет - я думаю, что это работает, потому что он находится в правильном режиме редактирования, где я ищу способ разрешить всегда изменять порядок, так что способ, чтобы onMove работал, когда не в режиме редактирования ... - person Greg; 08.11.2019
comment
EditMode - это просто значение состояния, вам нужно установить его для локального списка, чтобы иметь стиль переупорядочения строк. Эти вещи зависимы, нет ни первого, ни второго. Альтернативой является создание полностью настраиваемого представления в виде списка. - person Asperi; 09.11.2019
comment
хорошо, спасибо - так что в принципе невозможно - полезно знать. Мне очень нравятся GoApps (apps.apple.com/us/app/gotasks/id389113399), который настроен так, как я имел в виду и задавался вопросом, как это получить. Составить список DIY для этого будет довольно сложно, правда, нужно вручную перетаскивать события и т. Д.? - person Greg; 09.11.2019
comment
Насколько я понимаю, GoApps использует стандартное переупорядочение, активируемое кнопкой «Изменить». Если это то, что вы хотите, это еще проще - просто добавьте в любое место EditButton (). - person Asperi; 09.11.2019
comment
в представлении списка GoApps им, похоже, удалось не отображать кнопку удаления (это то, чего я надеялся избежать) и заменить ее флажком - не уверены, возможно ли это в SwiftUI? - person Greg; 09.11.2019