如何在Swift中的OSX桌面应用程序中将自定义菜单附加到主视图

时间:2016-07-10 02:12:27

标签: swift macos cocoa nsviewcontroller

鉴于以下GitHub项目:

https://github.com/kellyjanderson/swift-custom-menue

如何链接菜单项Custom>>自定义操作,到ViewController中的函数customAction?

2 个答案:

答案 0 :(得分:3)

AppDelegate

中定义菜单项的插座
@IBOutlet weak var customMenuItem: NSMenuItem!

在视图控制器中首先获取AppDelegate的实例:

 let appDelegate = NSApplication.sharedApplication().delegate as! AppDelegate

获取菜单项的实例,然后将IBAction绑定到它:

appDelegate.customMenuItem.action = #selector(customAction(_:))

例如,您希望将操作customAction绑定到菜单项。您可以在viewDidLoad

中添加以下代码
 override func viewDidLoad() {
        super.viewDidLoad()
         let appDelegate = NSApplication.sharedApplication().delegate as! AppDelegate
         print(appDelegate.customMenuItem)
        appDelegate.customMenuItem.action = #selector(customAction(_:))
    }

然后定义IBAction

 func customAction(sender: NSMenuItem){
        print("Custom Menu Item clicked")
    }

输出:

<NSMenuItem: 0x6080000a0720 Custom Action>
Custom Menu Item clicked

答案 1 :(得分:0)

所以关联的问题Why can't I connect my menu to my view controller IBAction?接近但没有为我提供具体的解决方案。以下是我解决这个问题的方法。

首先在ViewController中,您需要将您的函数标记为@IBAction

    @IBAction func customAction(sender: NSMenuItem){
        print("Custom Menu Item clicked")
    }

一旦该功能被标记为IBAction,它将在响应者链中可用;所以现在你可以控制点击并将菜单项拖到第一个响应者图标并选择你的功能,在本例中是customAction。