右键单击 NSView 时弹出 NSMenu (Swift)

Popup NSMenu on right-click on NSView (Swift)

我子class 了一个 NSView 来处理 mouseDown/rightMouseDown 事件。现在我想通过右键单击弹出一个上下文 NSMenu(这是一个 IBOutlet)。

NSMenu.popUpContextMenu(statusMenu, withEvent: theEvent, forView: self)

... 但它显示 "statusMenu is not a member of AppDelegate"。我如何访问 class 之外的变量?

编辑:

IBOutlet 位于 AppDelegate 中:

@IBOutlet weak var statusMenu: NSMenu!

我尝试从我的自定义 NSView 中调用它:

class customView : NSView { 
  override func rightMouseDown(theEvent : NSEvent) {
    // NSMenu.popUpContextMenu ???
  }
}

您可以通过多种方式执行此操作:

1) 在您的 NSView 中创建一个 IBOutlet 并将 NSMenu 连接到它。

2) 在你的 NSView 中创建一个 IBOutlet,将你的 AppDelegate 连接到它,并通过该插座引用菜单(如果你出于某种原因不想有两个引用到菜单)

3) 获取对 NSView 中 AppDelegate 的运行时引用 - 语法为

var appDelegate = NSApplication.sharedApplication().delegate as AppDelegate

并通过它参考菜单。

请注意,如果 3 "AppDelegate" 是您的 AppDelegate class 实际的名称(通常,但不一定是 "AppDelegate")。情况2中IBOutlet的类型也是如此。