objective-c – NSMenuItem启用项目
发布时间:2020-12-16 03:21:59 所属栏目:百科 来源:网络整理
导读:我有一个带有大量项目的NSMenuItem,但是…列表没有启用. 我的意思是说: 这是我的代码: - (void)didFetchNewList:(NSArray *)list{ NSArray *smallList = [list subarrayWithRange:NSMakeRange(0,10)]; NSMenu *menu = [[NSMenu alloc] initWithTitle:@""];
我有一个带有大量项目的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]; } 我将所有内容设置为已启用,但仍处于禁用状态.我怎么解决这个问题? 解决方法
创建NSMenuItem时,您的项目必须具有有效目标和有效选择器.这意味着目标不能为零,并且必须响应传递的选择器.请记住,在这种情况下,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]; 编辑:我在创建菜单项后看到你正在调用 – [NSMenuItem setEnabled:]并带有YES.这不是必需的,因为它们将默认启用. 编辑2:正如NSGod指出的那样(见下面的评论)目标可能是零.在这种情况下,您的应用程序的第一个响应者将收到传递的方法.也就是说,只要第一响应者实施了该方法. (编辑3)但是如果不是这种情况,该方法将被发送到响应者链中的下一个响应者.这将一直持续到发现响应者响应选择器或者没有响应者需要检查.如果未找到响应者,则不会启用菜单项. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |