gpt4 book ai didi

cocoa - 上下文菜单项未激活

转载 作者:行者123 更新时间:2023-12-03 17:45:35 27 4
gpt4 key购买 nike

我遇到了问题。我的上下文菜单已显示,但菜单项未激活。所以我用于显示菜单的新代码如下:

NSMenu *defMenu = [[[NSMenu alloc] initWithTitle:@"default Contextual Menu"] autorelease];

[defMenu insertItemWithTitle:@"Open" action:@selector(openFile) keyEquivalent:@"" atIndex:0];

[defMenu insertItemWithTitle:@"Delete" action:@selector(deleteFile) keyEquivalent:@"" atIndex:1];

return defMenu;

deleteFile和openFile函数声明如下:

-(int)openFile;

-(int)deleteFile;

我按如下方式调用我的上下文菜单:

-(void)doSingleClick 
{

if([[NSApp currentEvent] modifierFlags] & NSControlKeyMask)
{

NSLog(@"control clicked.......");

[NSMenu popUpContextMenu:[self defaultMenu] withEvent:[NSApp currentEvent] forView:tableView];

return;
}

}

我的上下文菜单项全部带有阴影,无法单击。请你告诉我哪里出错了。

谢谢

最佳答案

您的 openFile: 方法采用 int 作为参数。由于 insertItemWithTitle:action:withObject:keyEquivalent:atIndex: 采用一个对象,因此您为其提供的选择器也必须采用一个对象。

您可以使用 NSNumber 将 int 包装为对象,然后只需更改 openFile: 方法以获取 NSNumber 而不是int。就像这样:

[defMenu insertItemWithTitle:@"Open" action:@selector(openFile:) withObject:[NSNumber numberWithInt:5] keyEquivalent:@"" atIndex:0];

- (void)openFile:(NSNumber *)fileNumber {
int rowClicked = [fileNumber intValue];
// Do whatever your old method did here
}

编辑:要回答您更新的问题:

您的菜单项被禁用的原因是您只告诉他们要调用什么方法名称。您从未告诉项目实际上应该在哪个对象实例上调用这些方法。要解决此问题,您需要设置项目的目标:

NSMenuItem *openItem = [defMenu insertItemWithTitle:@"Open" action:@selector(openFile:) withObject:[NSNumber numberWithInt:5] keyEquivalent:@"" atIndex:0];
[openItem setTarget:self];

对于您拥有的每件元素,依此类推。

关于cocoa - 上下文菜单项未激活,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1359730/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com