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

我在列表中有一个滑块:

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

我启用了移动编辑模式:

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

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

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

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

目前,我禁止这种移动:

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

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

有没有办法读取编辑按钮的状态?要动态更改.moveDisabled(...)吗?

更新:已解决!

我添加了环境变量editMode

@Environment(\.editMode) var editMode

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

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

感谢@Asperi!

wangling568112 回答:Mac Catalyst上的SwiftUI-使用滑块编辑列表

我建议手动管理编辑模式,因此有可能跟踪它是真实状态。请在下面的代码提示中查看如何进行管理。该代码已简化,没有实际动作等,仅用于演示如何在.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")
            })
        }
    }
}
本文链接:https://www.f2er.com/3007258.html

大家都在问