OS X开发NSMenu应用详解 一、引言 NSMenu在Mac桌面软件开发中往往有3个方面的应用,作为程序的主菜单栏使用,作为视图邮件菜单使用和作为Dock菜单使用。 当一款Mac桌面软件运行时,会在Dock栏上显示一个图标,当在此图标上点击右键时,会出现一个Dock菜单,自定义此Dock菜单也十分容易,直接在AppDelegate中重写如下方法即可: -(NSMenu *)applicationDockMenu:(NSApplication *)sender{ NSMenu * menu = [[NSMenu alloc]initWithTitle:@"Menu = [[NSMenu alloc]initWithTitle:@"Menu"]; NSMenuItem * item1 = [[NSMenuItem alloc]initWithTitle:@ *menu; //其是否有子菜单 @property (readonly) BOOL hasSubmenu; //子菜单对象 @property (nullable, strong) NSMenu *
右击Dock栏会有默认菜单列表 如果要自定义右键的菜单列表,则在appdelegate里面添加方法 -(NSMenu *)applicationDockMenu:(NSApplication *)sender { NSMenu * menu = [[NSMenu alloc]initWithTitle:@"Menu"]; // title是名称,action是点击后操作,keyEquivalent NSMenuItem * item3 = [[NSMenuItem alloc]initWithTitle:@"菜单3" action:@selector(click) keyEquivalent:@""]; NSMenu * subMenu = [[NSMenu alloc]initWithTitle:@"subMenu"]; NSMenuItem * item4 = [[NSMenuItem alloc]initWithTitle @property (nonatomic, strong) NSStatusItem *statusItem; // 状态栏配置 @property (nonatomic, strong) NSMenu
popUpButton = [[NSPopUpButton alloc]initWithFrame:CGRectMake(100, 400, 200, 300)]; //设置弹出菜单 NSMenu * menu = [[NSMenu alloc]initWithTitle:@"menu"]; [menu insertItemWithTitle:@"one" action:@selector instancetype)initWithFrame:(NSRect)buttonFrame pullsDown:(BOOL)flag; //设置下拉菜单 @property (nullable, strong) NSMenu
protocol ContextMenu { @objc func tableView(_ tableView: NSTableView, menuForRows rows:IndexSet)->NSMenu extension tableview重写鼠标事件 ``` extension NSTableView { open override func menu(for event: NSEvent) -> NSMenu BTViewController: ContextMenu{ @objc func tableView(_ tableView: NSTableView, menuForRows rows:IndexSet)->NSMenu
则是不响应默认为NO),如果视图(NSView)体系中没有任何对象响应,那么NSApplication会将这个快捷键事件发送给menu bar(菜单栏).在Cocoa 的一些类中,比如 NSButton, NSMenu
Cocoa 框架中很多类不是使用类似 Carbon 的 API,就是依赖于用 Carbon 实现(注意,和传统观念不同,Carbon 和 Cocoa 在早期 Mac OS X 上是相互依赖的,比如菜单 NSMenu