标签: nsmenu

禁用/启用应用程序菜单项

在尝试学习菜单处理的基础知识时.我的测试应用程序的菜单栏有3个菜单 - 即"TestApp","文件"和"帮助".我发现我可以完全删除这些菜单,只需调用say:

NSMenu* rootMenu = [NSApp mainMenu];
[rootMenu removeItemAtIndex:2];
Run Code Online (Sandbox Code Playgroud)

但是,我只想暂时禁用它们(灰掉它们).请问有同样简单的方法吗?

cocoa nsmenu nsapplication

8
推荐指数
1
解决办法
5266
查看次数

NSMenu中的替代菜单项

我有一个NSMenu包含NSMenuItems自定义视图.我想要它,以便当按下alt按钮时,菜单项将改变它们的一部分外观(通过它们的视图).然而,我setAlternativeNSMenuItem文档中发现,实际上我只能在NSMenuItems没有自定义视图的情况下使用它.一旦我设置了自定义视图,就会显示所有菜单项.此外,我尝试在菜单打开时获取按键事件.由于其他运行循环,NSApplication's sendEvent:在菜单关闭之前不会接收事件.因此,我不能只是拦截即将发生的事件.

有没有人知道如何通过委托或子类化来通知菜单打开时何时按下alt键?

cocoa macos-carbon menu nsmenu nsmenuitem

7
推荐指数
1
解决办法
3033
查看次数

NSMenuItem启用项目

我有一个带有大量项目的NSMenuItem,但是...列表没有启用.

我的意思是说:
名单

这是我的代码:

- (void)didFetchNewList:(NSArray *)list
{
    NSArray *smallList = [list subarrayWithRange:NSMakeRange(0, 10)];

    NSMenu *menu = [[NSMenu alloc] initWithTitle:@""];

    for (NSDictionary *dict in smallList)
    {
        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
        [dateFormatter setDateFormat:@"MMM dd @ HH:mm:ss"];

        NSMenuItem *soMenuItem = [[NSMenuItem alloc] initWithTitle:
                  [dateFormatter stringFromDate:[dict objectForKey:@"date"]]
                                                            action:nil
                                                     keyEquivalent:@""];
        [soMenuItem setEnabled:YES];

        [menu addItem:soMenuItem];        
    }

    [menu addItem:[NSMenuItem separatorItem]];

    NSMenuItem *soMenuItem =  [[NSMenuItem alloc]
                     initWithTitle:@"Settings" action:nil keyEquivalent:@"S"];
    [soMenuItem setEnabled:YES];
    [menu addItem:soMenuItem];

    [statusItem setMenu:menu];
    [statusItem setEnabled:YES];

}
Run Code Online (Sandbox Code Playgroud)

我将所有内容设置为已启用,但仍处于禁用状态.我怎么解决这个问题?

cocoa objective-c nsmenu nsmenuitem

7
推荐指数
1
解决办法
5920
查看次数

NSMenu动画阻止主线程

我有:

  • NSStatusItem具有自定义视图(在辅助线程中滚动文本),辅助线程更新内部状态并通过setNeedsDisplay通知主线程.
  • 在mouseDown上,弹出一个NSMenu.
  • 但是,如果选择了NSMenu中的任何NSMenuItem,或者如果检测到第二个mouseDown并且NSMenu消失,则滚动文本动画会断断续续.

似乎NSMenu默认视图在执行动画时会阻塞主线程.我已经通过辅助线程输出time_since_last_loop与视图的drawRect:(主线程)进行了测试,只有drawRect显示了断断续续.自定义视图的drawRect从~30 fps下降到5帧几帧.

有没有NSMenu动画非阻塞,或与自定义视图的drawRect并发的方法?

nonblocking nsmenu nsview nsthread

7
推荐指数
1
解决办法
418
查看次数

在NSMenu打开时捕获按键事件

我有兴趣在NSMenu打开时捕获按键.例如,如果菜单是开放的,用户按下"E",或"1"在键盘上,发送特定的消息(优选地通过压制成哪个键的事件对象包含参考).

我看着备用菜单,但我只能被用来捕捉选项键的印象是.

目前我没有使用任何自定义视图,只是NSStatusBar(菜单产生的地方)和NSMenu.

我是Objective-C的新手,所以如果我的措辞不正确,我会道歉.

真的很感激帮助!

cocoa objective-c nsevent nsmenu

6
推荐指数
1
解决办法
1072
查看次数

如何在鼠标光标位置弹出NSMenu?

我想通过显示NSMenu鼠标光标位置来对热键按下做出反应.

我的应用程序是UIElement,并没有自己的窗口.

我知道有方法NSMenu:

-(void)popUpContextMenu:(NSMenu *)menu
              withEvent:(NSEvent *)event
                forView:(NSView *)view;
Run Code Online (Sandbox Code Playgroud)

但是当没有视图时它似乎不起作用:(.

我应该在鼠标光标位置创建假透明视图,然后在那里显示NSMenu,还是有更好的方法?

可以用Carbon实现吗?

cocoa nsmenu nsview

6
推荐指数
1
解决办法
5567
查看次数

仅对"源列表"中的某些项目进行上下文菜单

我有一个带有源列表(NSOutlineView)的窗口.我的源列表只有两个级别.第一级是标题,第二级是数据.我想在一些数据单元格上有一个上下文菜单.不是全部.

首先,我尝试在表格单元格视图上附加一个表示数据单元格的菜单 - >没有任何反应.

其次,我在IB中的大纲视图上附加一个菜单 - >在每个单元格(标题和数据)上打开上下文菜单.我搜索停止打开菜单,但我找不到任何东西.

你有什么想法吗?

谢谢

OS X 10.8.2 Lion,Xcode 4.5.2,SDK 10.8

cocoa contextmenu objective-c nsmenu nsoutlineview

6
推荐指数
1
解决办法
1315
查看次数

NSMenu代表没有被要求填充它

我有一个控制器对象拥有一个NSMenu并且是该菜单的委托,为了懒惰的人口.

但是,既numberOfItemsInMenu:没有menuNeedsUpdate:也没有调用过,因此菜单仍然是空的.

我已经确认:

  • 控制器对象尚未取消分配.(控制器反过来拥有菜单.)
  • 它有一个菜单.
  • 菜单有一个委托,那就是控制器.

如果我执行menuWillOpen:,即所谓的,但你不应该来填充菜单出现.

我尝试向菜单发送update消息,但这没有任何效果.代表仍然没有打电话,菜单仍然空着.

如果相关:此菜单不在主菜单中; 它在其他地方使用.

为什么菜单要求其代表填充它?有没有我错过的东西,或者这只是打破了?

cocoa nsmenu

6
推荐指数
1
解决办法
1098
查看次数

从帮助菜单中删除(或自定义)“搜索”

我的应用程序具有默认的“帮助”菜单。我删除了“帮助”条目并添加了一个链接到我网站上的论坛的支持条目。

帮助菜单笔尖如下所示:

笔尖中的菜单

但是一旦我启动了应用程序并运行了一个新的菜单项,它就会被吸引进来:

带搜索功能的菜单

我怎样才能让搜索消失?(或者更好的是,我怎样才能让它启动一个带有参数的网址,例如http://mywebsite.com/support?search=XXXXX)。

macos cocoa nsmenu

6
推荐指数
2
解决办法
1979
查看次数

使用Swift 3和Cocoa以编程方式创建菜单

我正在尝试使用Swift 3以编程方式创建一个Cocoa GUI应用程序(即没有nib文件).我遇到了应用程序菜单显示的问题.

我希望下面的代码在菜单栏上显示File菜单项.相反,当窗口启动并按预期工作时,设置菜单的代码似乎没有任何效果:

import AppKit

final class ApplicationController: NSObject, NSApplicationDelegate {
    var mainWindow: NSWindow?

    func applicationDidFinishLaunching(_ aNotification: Notification) {
        let mainMenu = NSMenu()
        let mainMenuFileItem = NSMenuItem(title: "File", action: nil, keyEquivalent: "")
        let fileMenu = NSMenu(title: "File")
        fileMenu.addItem(withTitle: "New...", action: nil, keyEquivalent: "n")
        mainMenuFileItem.submenu = fileMenu

        mainMenu.addItem(mainMenuFileItem)

        NSApp.mainMenu = mainMenu

        let window = NSWindow(contentRect: NSRect(x: 0, y: 0, width: 800, height: 600),
                                            styleMask: [.titled, .closable, .resizable, .miniaturizable],
                                            backing: NSBackingStoreType.buffered, defer: false)
        window.orderFrontRegardless()
        window.title = "Hello World"
        self.mainWindow = window …
Run Code Online (Sandbox Code Playgroud)

macos cocoa nsmenu swift3

6
推荐指数
1
解决办法
3613
查看次数