为什么当堆栈中有操作时,@Environment
UndoManager
不更新其canUndo
属性?我有一个视图,该视图的子级可以使用撤消/重做功能,但是由于某种原因,我无法基于管理器禁用撤消按钮。
struct MyView: View {
@Environment(\.undoManager) var undoManager: UndoManager?
var body: some View {
Button("Undo") { ... }
.disabled(!self.undoManager!.canUndo)
}
}
UndoManager.canUndo
不符合KVO,因此请使用某些通知发布者来跟踪状态,如下所示
struct MyView: View {
@Environment(\.undoManager) var undoManager
@State private var canUndo = false
// consider also other similar notifications
private let undoObserver = NotificationCenter.default.publisher(for: .NSUndoManagerDidCloseUndoGroup)
var body: some View {
Button("Undo") { }
.disabled(!canUndo)
.onReceive(undoObserver) { _ in
self.canUndo = self.undoManager!.canUndo
}
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句