使用动作选择器预设将项目添加到NSMenu

时间:2009-12-28 16:01:39

标签: objective-c cocoa nsmenu nsmenuitem

我是Obj-C / Cocoa编程的新手,我在尝试动态地将菜单项添加到NSMenu实例并在插入时已经设置了项动作选择器时遇到了问题。

我可以,添加动态菜单项,但是当通过菜单点击项目时,动作选择器不会触发。

下面第一行是我用来添加菜单项的代码行。您可以设置我将动作:(SEL)aSelector设置为“openEchowavesURL”功能。

这个函数在同一个控制器类文件中,我已经包含了下面的函数定义。

我只是调用了错误的选择器语法或某些东西?或者单击时让菜单项调用选择器的技巧是什么?


[statusMenu insertItemWithTitle:[NSString stringWithFormat:@"%d - %@", convo.newMessagesCount, convo.ewName] action:@selector(openEchowavesURL:) keyEquivalent:@"" atIndex:0];

- (void)openEchowavesURL:(id)sender {
    // function details here
}

2 个答案:

答案 0 :(得分:11)

如果您希望针对您的对象触发操作,则必须为新NSMenuItem指定目标:

NSMenuItem *item = [statusMenu insertItemWithTitle:[NSString stringWithFormat:@"%d - %@", convo.newMessagesCount, convo.ewName] action:@selector(openEchowavesURL:) keyEquivalent:@"" atIndex:0];
[item setTarget:self]; // or whatever target you want

如果你不这样做,那么NSResponder链将会走,直到一个对象响应选择器。

答案 1 :(得分:1)

操作需要一个目标,否则它们会被发送到零,然后适用新规则。