1、创建
复制@property(nonatomic, strong) NSMenu *cus_menu;
_cus_menu = [[NSMenu alloc] init];
_cus_menu.title = @"23456";
NSMenuItem *menu_item = [[NSMenuItem alloc] initWithTitle:@"Open" action:@selector(menu_Clicked:) keyEquivalent:@""];
[_cus_menu insertItem:menu_item atIndex:0];
menu_item = [[NSMenuItem alloc] initWithTitle:@"Open Recent..." action:nil keyEquivalent:@""];
[_cus_menu addItem:menu_item];
menu_item.submenu = [[NSMenu alloc] init];
NSMenuItem *m_item = [[NSMenuItem alloc] initWithTitle:@"File1" action:@selector(menu_Clicked:) keyEquivalent:@""];
[menu_item.submenu addItem:m_item];
m_item = [[NSMenuItem alloc] initWithTitle:@"File2" action:@selector(menu_Clicked:) keyEquivalent:@""];
[menu_item.submenu addItem:m_item];
m_item = [_cus_menu insertItemWithTitle:@"Close" action:@selector(menu_Clicked:) keyEquivalent:@"k" atIndex:2];
m_item = [_cus_menu addItemWithTitle:@"Close_2" action:@selector(menu_Clicked:) keyEquivalent:@"j"];
[_cus_menu removeItemAtIndex:0];
[_cus_menu removeItem:menu_item];
[_cus_menu setSubmenu:menu_item.submenu forItem:m_item];
[_cus_menu removeAllItems];
- (IBAction)popButtonClicked:(id)sender {
NSButton *button = (NSButton *)sender;
NSPoint point = button.frame.origin;
point.x += button.frame.size.width;
point.y = point.y ;
[self.cus_menu popUpMenuPositioningItem:nil atLocation:point inView:self.window.contentView];
}
- (void)menu_Tap {
}
- (void)menu_Clicked:(NSMenuItem *)m_item {
}
[NSMenu setMenuBarVisible:YES];
BOOL menuBarVisible = [NSMenu menuBarVisible];
GCLog(@"menuBarVisible == %@", @(menuBarVisible))
_cus_menu.autoenablesItems = YES;
_cus_menu.minimumWidth = 600;
_cus_menu.font = [NSFont boldSystemFontOfSize:25];
_cus_menu.allowsContextMenuPlugIns = YES;
_cus_menu.showsStateColumn = NO;
_cus_menu.userInterfaceLayoutDirection = NSUserInterfaceLayoutDirectionRightToLeft;
NSMenu *supermenu = _cus_menu.supermenu;
GCLog(@"supermenu == %@", supermenu.title)
NSArray<NSMenuItem *> *itemArray = _cus_menu.itemArray;
GCLog(@"itemArray == %@", itemArray)
for (NSMenuItem *item in itemArray) {
NSString *title = item.title;
GCLog(@"title == %@", title);
NSMenu *submenu = item.menu;
NSArray *subsubitems = submenu.itemArray;
for (NSMenuItem *subsubitem in subsubitems) {
GCLog(@"subsubitem == %@", subsubitem.title);
}
}
NSInteger numberOfItems = _cus_menu.numberOfItems;
GCLog(@"指定菜单中的项目数 == %@", @(numberOfItems))
NSMenuItem *highlightedItem = _cus_menu.highlightedItem;
GCLog(@"定当前高亮的菜单项 == %@", highlightedItem.title)
CGFloat menuBarHeight = _cus_menu.menuBarHeight;
GCLog(@"指定菜单栏的高度 == %@", @(menuBarHeight))
NSSize size = _cus_menu.size;
GCLog(@"指定菜单的尺寸 == %@", @(size))
menu_item = [_cus_menu itemAtIndex:2];
GCLog(@"index == %@", menu_item)
NSInteger index = [_cus_menu indexOfItem:menu_item];
index = [_cus_menu indexOfItemWithTitle:@"123456"];
GCLog(@"index == %@", @(index))
index = [_cus_menu indexOfItemWithTag:2];
GCLog(@"index == %@", @(index))
index = [_cus_menu indexOfItemWithRepresentedObject:@"123456"];
GCLog(@"index == %@", @(index))
index = [_cus_menu indexOfItemWithSubmenu:menu_item.submenu];
GCLog(@"index == %@", @(index))
index = [_cus_menu indexOfItemWithTarget:self andAction:@selector(menu_Tap)];
GCLog(@"index == %@", @(index))
menu_item = [_cus_menu itemWithTitle:@"234567"];
GCLog(@"menu_item == %@", menu_item)
menu_item = [_cus_menu itemWithTag:2];
GCLog(@"menu_item == %@", menu_item)
_cus_menu.delegate = self;
#pragma mark - NSMenuDelegate
- (void)menuNeedsUpdate:(NSMenu *)menu {
}
- (NSInteger)numberOfItemsInMenu:(NSMenu *)menu {
if (menu == self.file_menu) {
return 1;
}
else if (menu == self.edit_menu) {
return 2;
}
else if (menu == self.view_menu) {
return 3;
}
return 0;
}
- (BOOL)menu:(NSMenu *)menu updateItem:(NSMenuItem *)item atIndex:(NSInteger)index shouldCancel:(BOOL)shouldCancel {
if (item.tag == 1000) {
if ([self hasOpenDocument]) {
[item setEnabled:YES];
}
else {
[item setEnabled:NO];
}
}
return YES;
}
- (BOOL)menuHasKeyEquivalent:(NSMenu *)menu forEvent:(NSEvent *)event
target:(_Nullable id* _Nonnull)target
action:(_Nullable SEL* _Nonnull)action {
return YES;
}
- (void)menuWillOpen:(NSMenu *)menu {
}
- (void)menuDidClose:(NSMenu *)menu {
}
- (void)menu:(NSMenu *)menu willHighlightItem:(nullable NSMenuItem *)item {
}
- (NSRect)confinementRectForMenu:(NSMenu *)menu onScreen:(nullable NSScreen *)screen {
NSRect screenRect = [screen visibleFrame];
NSSize size = [menu size];
NSRect confinementRect = NSMakeRect(screenRect.origin.x + 10, screenRect.origin.y + 10, screenRect.size.width - 20, size.height - 20 - size.height);
return confinementRect;
}
[_cus_menu update];
[_cus_menu itemChanged:menu_item];
[_cus_menu performActionForItemAtIndex:2];
[_cus_menu cancelTracking];
[_cus_menu cancelTrackingWithoutAnimation];
-
1.6 效果样式

2、其他
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂
· 凌晨三点救火实录:Java内存泄漏的七个神坑,你至少踩过三个!