#list #swiftui
#Список #swiftui
Вопрос:
Цель: я хотел бы иметь возможность настраивать шаговый шаг в режиме редактирования, но когда пользователь начинает перемещать строку заголовка, либо перетащите шаговый шаг вместе с ним, либо скройте все шаговые строки, пока перемещение не будет завершено.
Текущий: когда пользователь перемещает строку заголовка, он перемещается между всеми строками, а не только между строками заголовка.
Пробовал: я просмотрел документацию onMoved, и, похоже, вы можете что-то сделать только после завершения перемещения. Я также пытался использовать жесты с длинным нажатием и нажатием, но, похоже, они работают только с самим текстом, а не со строкой. Я не уверен, возможно ли это в настоящее время.
Код:
struct ContentView: View {
@ObservedObject var items = ItemGroup()
@State private var editMode = EditMode.active
var body: some View {
NavigationView{
List {
ForEach(Array(items.group.enumerated()), id: .element.id) { index, item in
Text(items.group[index].item)
.deleteDisabled(!editMode.isEditing)
if editMode.isEditing {
let stepper = items.group[index].stepper
Stepper("Stepper: (stepper)", value: $items.group[index].stepper, in: 1...10)
.moveDisabled(true)
.deleteDisabled(true)
}
}
.onMove(perform: onMove)
}
.navigationBarTitle("List")
.navigationBarItems(leading: EditButton(), trailing: addButton)
.environment(.editMode, $editMode)
}
}
private var addButton: some View {
switch editMode {
case .active:
return AnyView(Button(action: onAdd) { Image(systemName: "plus") })
default:
return AnyView(EmptyView())
}
}
func onAdd() {
let newItem = SingleItem(item: "Word - (items.group.count)", supplement: [""], stepper: 1, current: 1)
self.items.group.append(newItem)
}
private func onMove(source: IndexSet, destination: Int) {
items.group.move(fromOffsets: source, toOffset: destination)
}
}
struct SingleItem: Identifiable {
let id = UUID()
var item: String
var supplement: [String]
var stepper: Int
var current: Int
}
class ItemGroup: ObservableObject{
@Published var group = [SingleItem]()
}
Комментарии:
1. Не уверен, что я понял, чего вы хотите достичь.
2. @Asperi При перемещении строки
Text(items.group[index].item)
в режиме редактирования я бы хотел, чтобы шаговая ячейка перетаскивалась вместе с ней. В качестве альтернативы я хотел бы, чтобы все пошаговые строки исчезли, как только строкаText(items.group[index].item)
будет выбрана для перемещения, а затем снова появится после размещения.