gpt4 book ai didi

objective-c - NSMenuItem 启用项

转载 作者:太空狗 更新时间:2023-10-30 03:36:17 26 4
gpt4 key购买 nike

我有一个 NSMenuItem,里面有一堆项目,但是......列表没有被启用。

我的意思是:
List

这是我的代码:

- (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];

}

我将所有设置都设置为已启用,但它仍处于禁用状态。我该如何解决这个问题?

最佳答案

当您创建一个 NSMenuItem 时,您的项目必须有一个有效的目标和一个有效的选择器。这意味着目标不能为 nil,并且必须响应传递的选择器。请记住,在这种情况下,NULL 选择器不会启用菜单项。

NSMenu *myMenu;
NSMenuItem *myItem;

myMenu = [[NSMenu alloc] initWithTitle:@""];
myItem = [[NSMenuItem alloc] initWithTitle:@"Test" action:@selector(validSelector:) keyEquivalent:@""];
[myItem setTarget:myTarget];
[myMenu addItem:myItem];
// Do anything you like
[myMenu release];
[myItem release];

编辑: 我看到您在创建菜单项后使用 YES 调用 -[NSMenuItem setEnabled:]。这不是必需的,因为它们将默认启用。

编辑 2: 正如 NSGod 指出的(见下面的评论),目标可以为零。在这种情况下,您的应用程序的第一响应者将收到传递的方法。也就是说,只要第一响应者实现了该方法。 (edit 3) 但是,如果不是这种情况,该方法将被发送到响应者链中的下一个响应者。这一直持续到找到响应选择器的响应者或没有留下要检查的响应者为止。当找不到响应者时,您的菜单项将不会被启用。

关于objective-c - NSMenuItem 启用项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8751431/

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