标签: nsmenu

Apple如何在打开时更新机场菜单?(如何在NSMenu已经打开时更改)

我有一个弹出打开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)

这个方法肯定被调用,因为如果我单击菜单并立即返回到它,我会得到一个包含此信息的更新菜单.问题是它没有更新 - 而菜单是打开的.

cocoa objective-c statusbar nsmenu nsmenuitem

34
推荐指数
3
解决办法
4987
查看次数

如何访问系统选择的菜单项蓝色?

我的工作,有一个自定义的应用程序NSViewNSStatusBar,当用户点击它执行所有的绘图.但这就是问题,我正在绘制的颜色,因为视图的背景颜色与系统蓝色不同.

我的应用程序的颜色:
在此输入图像描述

Twitter的菜单项颜色(系统):
在此输入图像描述

你清楚地看到,我的蓝色比系统轻.这是我目前使用的代码(并且在比Yosemite更早的版本上完美运行):

[[NSColor selectedMenuItemColor] set];
NSRectFill(rect);
Run Code Online (Sandbox Code Playgroud)

我甚至尝试过挑选菜单项的颜色,但似乎颜色受到菜单栏下方壁纸的影响.
关于如何实现系统的任何想法看起来?

nsmenu nsmenuitem nscolor nsstatusbar osx-yosemite

29
推荐指数
1
解决办法
612
查看次数

似乎无法在NSMenuItem上设置setEnabled:NO

我通过Interface Builder 进行了子类化NSMenu和连接NSMenuItem.我已经通过调试器测试了它们是否真的被初始化了.

菜单设置为不自动启用项目.仍然当我设置我的任何NSMenuItem时,[myMenuItem setEnabled:NO]它们仍然被启用.即使我[self update]从NSMenu子类内部调用.

我错过了什么?

cocoa nsmenu nsmenuitem

20
推荐指数
5
解决办法
8199
查看次数

NSMenuItem自定义视图上方的差距

我在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)

macos cocoa objective-c nsmenu nsmenuitem

19
推荐指数
1
解决办法
3817
查看次数

用编程方式在NSMenuItems中创建NSMenu?

首先,我想指出这个问题可能已经被问过了,我找不到任何答案.

所以,我是以编程方式尝试创建一个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,但我该怎么做,如果那不是问题,那么它是什么?我对这些东西很陌生,但对学习感兴趣,所以任何提示都会比什么都好!

cocoa menu nsmenu nsmenuitem

14
推荐指数
1
解决办法
1万
查看次数

如何禁用Sierra应用程序中的"显示标签栏"菜单选项?

我有一个使用NSWindow工具栏的应用程序.出于美观原因,我不希望用户能够自定义此工具栏.在Sierra中有一个新的菜单选项,可以插入到"菜单>视图"中Show Tab Bar.如何禁用此功能?启用它似乎只会增加工具栏的高度,因为我没有在图标下显示额外的标签.

nsmenu nswindow macos-sierra

14
推荐指数
3
解决办法
4088
查看次数

我如何在Cocoa中获取应用程序菜单

如何获取应用程序菜单的NSMenu或NSMenuItem(苹果菜单旁边菜单栏中的菜单).它似乎是自动创建的,并且独立于我通过NSApplication setMainMenu设置的NSMenu.

顺便说一下:我正在构建没有Xcode的完整应用程序,所以请不要使用InterfaceBuilder提示.

PS:MacOSX 10.5

macos cocoa nsmenu

13
推荐指数
3
解决办法
1万
查看次数

有没有办法控制打开菜单时最初突出显示的NSMenuItem项?

我正在研究符号弹出按钮的细节,类似于编辑器窗口顶部的Xcode 3.

我的控制器对象是NSMenu显示时NSPopUpButton显示的对象.我实现了这两种方法,numberOfItemsInMenu:menu:updateItem:atIndex:shouldCancel:在即将显示之前填充菜单.

但是,NSMenuItem每次用户在编辑器中更改选择时,所选内容的标题和图像都必须更改NSTextView,或者对文本进行更改; 就像Xcode的情况一样.

我遇到的问题是当用户点击NSPopUpButton显示时NSMenu,所选的NSMenuItem和应该选择的项目不匹配,因为菜单还没有正确数量的项目.

我想知道是否有一种方法来控制NSMenuItem当用户点击打开菜单时最初突出显示和跟踪哪个.目前,它始终突出显示和跟踪的第一个项目,或者,如果用户先前已选择项目,则突出显示并跟踪该项目.

我尝试尽可能地解释,但这是一个说明我的问题的图像:

http://imgur.com/izGvh

当用户打开菜单时,我希望突出显示的项目与所选项目相同.有任何想法吗?

cocoa objective-c nsmenu

12
推荐指数
1
解决办法
2432
查看次数

系统正在将不需要的项添加到我的应用中的自定义上下文菜单中

我已经为我的Cocoa应用程序定制了上下文菜单,以便只显示某些项目.尽管我进行了自定义,但我发现系统添加了一个菜单项 - "将iTunes添加为语音轨道".

我尝试从菜单中删除此项目但不知何故,我无法获得控制权.有没有办法删除这个项目,或者我是否必须编写AppleScript来禁用键盘快捷键下的iTunes选项?我讨厌这样做,因为我将不得不为用户恢复它.

macos cocoa contextmenu nsmenu

12
推荐指数
2
解决办法
2131
查看次数

如何像Apple Pro Apps一样自定义NSMenu?

我想自定义一个NSMenuNSMenuItems,所以做它看起来像苹果专业应用软件.

但是我如何定制NSMenu?没有绘制方法来改变外观.如果我将a设置NSView为a NSMenuItem,我可以设置背景颜色,但是我会忽略突出显示和菜单处理.此外,顶盖和底盖NSMenu不能定制.

我发现只有这个提示,但遗憾的是没有代码.

Dark TableView带有白色菜单和白色菜单项

我会很乐意得到一些帮助!

customization cocoa nsmenu nsmenuitem

10
推荐指数
1
解决办法
2296
查看次数