【原文地址:Mac简单例子实现主菜单在多个窗口之间的共用问题】
【作者:chenghxc】
【Demo:源码下载地址】
为了更简单的实现主菜单在多个窗口之间的共用问题,特意写了一个超级简单的例子。对于Mac的初学者理解起来会比较容易,大牛的路过勿笑哈。
这个例子中主要有两个窗口,在这两个窗口中都实现了 -(IBAction)getKaoYa:(id)sender 方法。在主菜单中有一个‘点烤鸭’菜单项(为什么叫点烤鸭呢?因为此时我肚子有点饿。),‘点烤鸭’的 selector 不是直接链接到第一个窗口的 getKaoYa: 方法上,而是链接了 First Responder 里的 getKaoYa: 。
为什么 First Responder 中会有 getKaoYa: 方法呢?【对于 First Responder 的作用大家可以网上搜索以下,传送门】
简单的解释就是只要你的方法的返回类型是IBAction ,例如 -(IBAction)getKaoYa:(id)sender 就会出现在 First Responder 中,而在运行时当触发 First Responder 中的某个方法时,First Responder 会调用当前活跃窗口(也可以叫置顶窗口)的相应方法。
好了,大家可以下载我的demo看一下。打开两个窗口后尝试切换窗口,点击主菜单中的‘点烤鸭’,在后台会输出不一样的信息。
如果你想禁用某个窗口的‘点烤鸭’功能,可以在相应窗口的-(BOOL)validateMenuItem:(NSMenuItem *)menuItem中控制。(demo中会有相应说明)