objective-c – NSMenuItem启用项目

前端之家收集整理的这篇文章主要介绍了objective-c – NSMenuItem启用项目前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个带有大量项目的NSMenuItem,但是…列表没有启用.

我的意思是说:

这是我的代码

  1. - (void)didFetchNewList:(NSArray *)list
  2. {
  3. NSArray *smallList = [list subarrayWithRange:NSMakeRange(0,10)];
  4.  
  5. NSMenu *menu = [[NSMenu alloc] initWithTitle:@""];
  6.  
  7. for (NSDictionary *dict in smallList)
  8. {
  9. NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
  10. [dateFormatter setDateFormat:@"MMM dd @ HH:mm:ss"];
  11.  
  12. NSMenuItem *soMenuItem = [[NSMenuItem alloc] initWithTitle:
  13. [dateFormatter stringFromDate:[dict objectForKey:@"date"]]
  14. action:nil
  15. keyEquivalent:@""];
  16. [soMenuItem setEnabled:YES];
  17.  
  18. [menu addItem:soMenuItem];
  19. }
  20.  
  21. [menu addItem:[NSMenuItem separatorItem]];
  22.  
  23. NSMenuItem *soMenuItem = [[NSMenuItem alloc]
  24. initWithTitle:@"Settings" action:nil keyEquivalent:@"S"];
  25. [soMenuItem setEnabled:YES];
  26. [menu addItem:soMenuItem];
  27.  
  28. [statusItem setMenu:menu];
  29. [statusItem setEnabled:YES];
  30.  
  31. }

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

解决方法

创建NSMenuItem时,您的项目必须具有有效目标和有效选择器.这意味着目标不能为零,并且必须响应传递的选择器.请记住,在这种情况下,NULL选择器不会启用菜单项.
  1. NSMenu *myMenu;
  2. NSMenuItem *myItem;
  3.  
  4. myMenu = [[NSMenu alloc] initWithTitle:@""];
  5. myItem = [[NSMenuItem alloc] initWithTitle:@"Test" action:@selector(validSelector:) keyEquivalent:@""];
  6. [myItem setTarget:myTarget];
  7. [myMenu addItem:myItem];
  8. // Do anything you like
  9. [myMenu release];
  10. [myItem release];

编辑:我在创建菜单项后看到你正在调用 – [NSMenuItem setEnabled:]并带有YES.这不是必需的,因为它们将默认启用.

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

猜你在找的C&C++相关文章