2016-04-11 26 views
3

如何在点击按钮后显示NSMenu旁边的NSButton在Swift OSX中显示NSMenu旁边的NSButton

这就是我到目前为止。

@IBOutlet weak var BtnMenu: NSButton! 

// Menu 
let appMenu = NSMenu() 
let showPrefsMenuItem = NSMenuItem(title: "Preferences...", action: #selector(VC.showPrefs(_:)), keyEquivalent: "") 
let showAboutMenuItem = NSMenuItem(title: "About", action: #selector(VC.showAbout(_:)), keyEquivalent: "") 
let quitAppMenuItem = NSMenuItem(title: "Quit", action: #selector(VC.quitApp(_:)), keyEquivalent: "") 

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Set up menu 
    self.appMenu.addItem(self.showPrefsMenuItem) 
    self.appMenu.addItem(self.showAboutMenuItem) 
    self.appMenu.addItem(NSMenuItem.separatorItem()) 
    self.appMenu.addItem(self.quitAppMenuItem) 
} 

// Shows the app menu 
@IBAction func openMenu(sender: NSButton) { 
    self.appMenu.popUpMenuPositioningItem(self.appMenu.itemAtIndex(0), atLocation: NSEvent.mouseLocation(), inView: nil) 
} 

但是现在,菜单显示在鼠标位置上。 Theresa是一种显示按钮旁边的菜单的方法吗?

谢谢。

回答

4

这是我如何解决它:

let p = NSPoint(x: sender.frame.origin.x, y: sender.frame.origin.y - (sender.frame.height/2)) 
self.appMenu.popUp(positioning: nil, at: p, in: sender.superview) 

在这种情况下,菜单被点击的按钮下显示。

0

试试这个:

let p = NSPoint(x: sender.frame.origin.x, y: sender.frame.origin.y) 
self.appMenu.popUpMenuPositioningItem(self.appMenu.itemAtIndex(0), atLocation:p , inView: nil) 
+0

号'atLocation'需要一个'NSPoint',但发件人。框架是'NSRect',所以它不起作用 – daB0bby

0

目前只缺通过发送按钮。

约翰elemans响应:

let p = NSPoint(x: sender.frame.origin.x, y: sender.frame.origin.y) 
self.appMenu.popUpMenuPositioningItem(self.appMenu.itemAtIndex(0), atLocation:p , inView: sender) 
2

斯威夫特3.

显示NSMenu下键:

let p = NSPoint(x: 0, y: sender.frame.height) 
appMenu.popUp(positioning: nil, at: p, in: sender) 

显示NSMenu右侧的按钮:

let p = NSPoint(x: sender.frame.width, y: 0) 
appMenu.popUp(positioning: nil, at: p, in: sender)