Mac Catalyst上的SwiftUI-使用滑块编辑列表

问题描述 投票:0回答:1

我在列表中有一个滑块:

img1

我启用了移动编辑模式:

.onMove { source, destination in
    // ...                     
}

img2

现在我不能移动滑块...

img3

目前,我禁止这种移动:

.moveDisabled({
    #if targetEnvironment(macCatalyst)
    return true
    #else
    return false
    #endif
}())

删除所有移动功能的人……我只想禁用拖动。

是否可以读取编辑按钮的状态?要动态更改.moveDisabled(...)

更新:已解决!

我添加了环境变量editMode

@Environment(\.editMode) var editMode

然后像这样将其连接起来:

.moveDisabled(editMode?.wrappedValue == .active ? false : true)

感谢@Asperi!

listview slider swiftui maccatalyst
1个回答
1
投票

我建议手动管理编辑模式,因此有可能跟踪它是真实状态。请在下面的代码提示中查看如何进行管理。该代码经过简化,没有实际动作等,仅用于演示如何在.active编辑模式下禁用移动。

注意:至少在我的Xcode 11.2中,使用默认@Environment(\.editMode)不适用于此目的。因此,它被设置为绑定到本地状态,因此可以通过List以及我们的代码进行跟踪。

struct TestEditWithSliderInList: View {
    @State var value = Array(repeating: 0.0, count: 5)
    @State var editMode: EditMode = .inactive

    var body: some View {
        NavigationView {
            List {
                ForEach(0..<5, id: \.self) { i in
                    HStack {
                        Text("Slider \(i)")
                        Slider(value: self.$value[i], in: 0...100)
                    }
                }
                .onDelete(perform: {_ in })
                .onMove(perform: {(_,_) in })
                .moveDisabled(editMode == .active ? false : true)
            }
            .environment(\.editMode, $editMode)
            .navigationBarItems(trailing: Button(action: {
                withAnimation {
                    self.editMode = (self.editMode == .active ? .inactive : .active)
                }
            }) {
                Text(self.editMode == .active ? "Done" : "Edit")
            })
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.