菜单中未显示UndoManager.setActionName (SwiftUI macOS)是一个关于SwiftUI在macOS平台上的一个问题。在SwiftUI中,UndoManager是一个用于管理撤销和重做操作的类。它允许用户撤销和重做他们在应用程序中进行的操作。
在macOS上,当我们使用SwiftUI构建应用程序时,我们可能会遇到菜单中未显示UndoManager.setActionName的情况。这是因为在macOS上,菜单栏是由AppKit框架提供的,而不是SwiftUI框架。因此,我们需要使用AppKit框架中的一些特定方法来处理撤销和重做操作。
要在菜单中显示UndoManager.setActionName,我们可以按照以下步骤进行操作:
import AppKit
class AppDelegate: NSObject, NSApplicationDelegate {
func applicationDidFinishLaunching(_ notification: Notification) {
NSApp.undoManager = UndoManager()
}
}
import SwiftUI
import AppKit
struct ContentView: View {
@Environment(\.undoManager) private var undoManager
var body: some View {
// Your SwiftUI content here
}
}
struct NSViewRepresentableWrapper: NSViewRepresentable {
typealias NSViewType = NSView
func makeNSView(context: Context) -> NSView {
let view = NSView()
view.undoManager = context.coordinator.undoManager
return view
}
func updateNSView(_ nsView: NSView, context: Context) {
nsView.undoManager = context.coordinator.undoManager
}
func makeCoordinator() -> Coordinator {
Coordinator()
}
class Coordinator: NSObject {
let undoManager = UndoManager()
}
}
class AppDelegate: NSObject, NSApplicationDelegate {
// ...
@IBAction func undo(_ sender: Any?) {
NSApp.sendAction(#selector(UndoManager.undo), to: nil, from: sender)
}
@IBAction func redo(_ sender: Any?) {
NSApp.sendAction(#selector(UndoManager.redo), to: nil, from: sender)
}
}
现在,当我们在我们的应用程序中进行操作时,我们将能够在菜单中看到Undo和Redo选项,并且它们将正确地调用UndoManager的撤销和重做方法。
对于腾讯云相关产品和产品介绍链接地址,由于要求不能提及具体的云计算品牌商,我无法提供相关链接。但你可以通过访问腾讯云官方网站,了解他们的云计算产品和服务。
领取专属 10元无门槛券
手把手带您无忧上云