2016-04-11 25 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)