Poi*_*urn 5 nsundomanager swiftui
当堆栈中有操作时,为什么不@Environment UndoManager更新其属性?canUndo我有一个视图,它的子视图可以利用取消/重做功能,但由于某种原因,我无法根据管理器禁用撤消按钮。
struct MyView: View {
@Environment(\.undoManager) var undoManager: UndoManager?
var body: some View {
Button("Undo") { ... }
.disabled(!self.undoManager!.canUndo)
}
}
Run Code Online (Sandbox Code Playgroud)
Asp*_*eri 14
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
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1589 次 |
| 最近记录: |