Mac Catalyst 上的 SwiftUI - 使用滑块编辑列表
SwiftUI on Mac Catalyst - Edit List with Slider
我在列表中找到了一个滑块:
我启用移动编辑模式:
.onMove { source, destination in
// ...
}
现在我无法移动滑块...
现在我禁用这样的移动:
.moveDisabled({
#if targetEnvironment(macCatalyst)
return true
#else
return false
#endif
}())
删除所有移动功能...我只想禁用拖动。
有没有办法读取编辑按钮的状态?要动态更改 .moveDisabled(...)
?
更新:已解决!
我添加了环境变量editMode
:
@Environment(\.editMode) var editMode
然后像这样连接起来:
.moveDisabled(editMode?.wrappedValue == .active ? false : true)
谢谢@Asperi!
我建议手动管理编辑模式,这样就有可能跟踪它的真实状态。请参阅下面的代码想法如何管理它。代码精简,w/o真实动作等,只是为了演示如何在.active
编辑模式下禁用移动。
注意:使用默认 @Environment(\.editMode)
不适用于此目的,至少在我的 Xcode 11.2 中是这样。所以它被设置为绑定到本地状态,所以它被跟踪并使用 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")
})
}
}
}
我在列表中找到了一个滑块:
我启用移动编辑模式:
.onMove { source, destination in
// ...
}
现在我无法移动滑块...
现在我禁用这样的移动:
.moveDisabled({
#if targetEnvironment(macCatalyst)
return true
#else
return false
#endif
}())
删除所有移动功能...我只想禁用拖动。
有没有办法读取编辑按钮的状态?要动态更改 .moveDisabled(...)
?
更新:已解决!
我添加了环境变量editMode
:
@Environment(\.editMode) var editMode
然后像这样连接起来:
.moveDisabled(editMode?.wrappedValue == .active ? false : true)
谢谢@Asperi!
我建议手动管理编辑模式,这样就有可能跟踪它的真实状态。请参阅下面的代码想法如何管理它。代码精简,w/o真实动作等,只是为了演示如何在.active
编辑模式下禁用移动。
注意:使用默认 @Environment(\.editMode)
不适用于此目的,至少在我的 Xcode 11.2 中是这样。所以它被设置为绑定到本地状态,所以它被跟踪并使用 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")
})
}
}
}