我有一个弹出打开NSMenu的状态栏项目,我有一个委托集,它正确连接(-(void)menuNeedsUpdate:(NSMenu *)menu
工作正常).也就是说,该方法设置为在显示菜单之前调用,我需要监听并触发异步请求,稍后在菜单打开时更新菜单,我无法弄清楚应该如何完成.
谢谢 :)
编辑
好的,我现在在这里:
单击菜单项(在状态栏中)时,将调用一个运行NSTask的选择器.我使用通知中心来监听该任务何时完成,并写下:
[[NSRunLoop currentRunLoop] performSelector:@selector(updateTheMenu:) target:self argument:statusBarMenu order:0 modes:[NSArray arrayWithObject:NSEventTrackingRunLoopMode]];
Run Code Online (Sandbox Code Playgroud)
并有:
- (void)updateTheMenu:(NSMenu*)menu {
NSMenuItem *mitm = [[NSMenuItem alloc] init];
[mitm setEnabled:NO];
[mitm setTitle:@"Bananas"];
[mitm setIndentationLevel:2];
[menu insertItem:mitm atIndex:2];
[mitm release];
}
Run Code Online (Sandbox Code Playgroud)
这个方法肯定被调用,因为如果我单击菜单并立即返回到它,我会得到一个包含此信息的更新菜单.问题是它没有更新 - 而菜单是打开的.
我的工作,有一个自定义的应用程序NSView
上NSStatusBar
,当用户点击它执行所有的绘图.但这就是问题,我正在绘制的颜色,因为视图的背景颜色与系统蓝色不同.
我的应用程序的颜色:
Twitter的菜单项颜色(系统):
你清楚地看到,我的蓝色比系统轻.这是我目前使用的代码(并且在比Yosemite更早的版本上完美运行):
[[NSColor selectedMenuItemColor] set];
NSRectFill(rect);
Run Code Online (Sandbox Code Playgroud)
我甚至尝试过挑选菜单项的颜色,但似乎颜色受到菜单栏下方壁纸的影响.
关于如何实现系统的任何想法看起来?
我通过Interface Builder 进行了子类化NSMenu
和连接NSMenuItem
.我已经通过调试器测试了它们是否真的被初始化了.
菜单设置为不自动启用项目.仍然当我设置我的任何NSMenuItem时,[myMenuItem setEnabled:NO]
它们仍然被启用.即使我[self update]
从NSMenu子类内部调用.
我错过了什么?
我在a上使用setView:
方法NSMenuItem
来设置自定义视图.在此自定义视图中,有一个图像占据整个视图.在NSMenuItem
这个自定义视图是在菜单的第一个,但问题是,它不坐与菜单的顶部齐平,有很大的差距,你可以在这里看到:
为什么会这样,我怎么能阻止它呢?
编辑
我现在正在使用此代码,但我正在EXC_BAD_ACCESS
上线InstallControlEventHandler
.
-(void)applicationDidFinishLaunching:(NSNotification *)aNotification {
HIViewRef contentView;
MenuRef menuRef = [statusMenu carbonMenuRef];
HIMenuGetContentView(menuRef, kThemeMenuTypePullDown, &contentView);
EventTypeSpec hsEventSpec[1] = {
{ kEventClassMenu, kEventMenuCreateFrameView }
};
InstallControlEventHandler(contentView,
NewEventHandlerUPP((EventHandlerProcPtr)hsMenuCreationEventHandler),
GetEventTypeCount(hsEventSpec),
hsEventSpec,
NULL,
NULL); // Get EXC_BAD_ACCESS here.
}
static OSStatus hsMenuContentEventHandler( EventHandlerCallRef caller, EventRef event, void* refcon )
{
OSStatus err;
check( GetEventClass( event ) == kEventClassControl );
check( GetEventKind( event ) == kEventControlGetFrameMetrics );
err = CallNextEventHandler( caller, event ); …
Run Code Online (Sandbox Code Playgroud) 首先,我想指出这个问题可能已经被问过了,我找不到任何答案.
所以,我是以编程方式尝试创建一个NSMenu和NSMenuItem到主栏,所以fe.NSMenu将是File,然后它将包含3x NSMenuItem,New,Open和Save.
但是没有什么工作,这就是我目前所拥有的:
NSMenu *fileMenu = [[NSMenu alloc] initWithTitle:@"File"];
NSMenuItem *newMenu = [[NSMenuItem alloc] initWithTitle:@"New" action:NULL keyEquivalent:@""];
NSMenuItem *openMenu = [[NSMenuItem alloc] initWithTitle:@"Open" action:NULL keyEquivalent:@""];
NSMenuItem *saveMenu = [[NSMenuItem alloc] initWithTitle:@"Save" action:NULL keyEquivalent:@""];
[newMenu setMenu:fileMenu];
[openMenu setMenu:fileMenu];
[saveMenu setMenu:fileMenu];
Run Code Online (Sandbox Code Playgroud)
但没有任何反应,我很确定我必须告诉应用程序它应该使用fileMenu,但我该怎么做,如果那不是问题,那么它是什么?我对这些东西很陌生,但对学习感兴趣,所以任何提示都会比什么都好!
我有一个使用NSWindow工具栏的应用程序.出于美观原因,我不希望用户能够自定义此工具栏.在Sierra中有一个新的菜单选项,可以插入到"菜单>视图"中Show Tab Bar
.如何禁用此功能?启用它似乎只会增加工具栏的高度,因为我没有在图标下显示额外的标签.
如何获取应用程序菜单的NSMenu或NSMenuItem(苹果菜单旁边菜单栏中的菜单).它似乎是自动创建的,并且独立于我通过NSApplication setMainMenu设置的NSMenu.
顺便说一下:我正在构建没有Xcode的完整应用程序,所以请不要使用InterfaceBuilder提示.
PS:MacOSX 10.5
我正在研究符号弹出按钮的细节,类似于编辑器窗口顶部的Xcode 3.
我的控制器对象是NSMenu
显示时NSPopUpButton
显示的对象.我实现了这两种方法,numberOfItemsInMenu:
并menu:updateItem:atIndex:shouldCancel:
在即将显示之前填充菜单.
但是,NSMenuItem
每次用户在编辑器中更改选择时,所选内容的标题和图像都必须更改NSTextView
,或者对文本进行更改; 就像Xcode的情况一样.
我遇到的问题是当用户点击NSPopUpButton
显示时NSMenu
,所选的NSMenuItem
和应该选择的项目不匹配,因为菜单还没有正确数量的项目.
我想知道是否有一种方法来控制NSMenuItem
当用户点击打开菜单时最初突出显示和跟踪哪个.目前,它始终突出显示和跟踪的第一个项目,或者,如果用户先前已选择项目,则突出显示并跟踪该项目.
我尝试尽可能地解释,但这是一个说明我的问题的图像:
当用户打开菜单时,我希望突出显示的项目与所选项目相同.有任何想法吗?
我已经为我的Cocoa应用程序定制了上下文菜单,以便只显示某些项目.尽管我进行了自定义,但我发现系统添加了一个菜单项 - "将iTunes添加为语音轨道".
我尝试从菜单中删除此项目但不知何故,我无法获得控制权.有没有办法删除这个项目,或者我是否必须编写AppleScript来禁用键盘快捷键下的iTunes选项?我讨厌这样做,因为我将不得不为用户恢复它.
我想自定义一个NSMenu
与NSMenuItems
,所以做它看起来像苹果专业应用软件.
但是我如何定制NSMenu
?没有绘制方法来改变外观.如果我将a设置NSView
为a NSMenuItem
,我可以设置背景颜色,但是我会忽略突出显示和菜单处理.此外,顶盖和底盖NSMenu
不能定制.
我发现只有这个提示,但遗憾的是没有代码.
我会很乐意得到一些帮助!
nsmenu ×10
cocoa ×8
nsmenuitem ×6
macos ×3
objective-c ×3
contextmenu ×1
macos-sierra ×1
menu ×1
nscolor ×1
nsstatusbar ×1
nswindow ×1
osx-yosemite ×1
statusbar ×1