【问题标题】:Get index of NSMenuItem (sender) in parent menu在父菜单中获取 NSMenuItem (sender) 的索引
【发布时间】:2012-04-19 05:21:17
【问题描述】:

我有一个NSMenu应用程序停靠菜单)和其中的几个具有相同操作的项目。

如何确定容器菜单中的发件人项(触发操作的项)的索引? (我对title 不感兴趣,因为那可能是重复的)

这就是我尝试过的,但它一直返回0(零)。

- (void)myAction:(id)sender
{
    NSMenuItem* mi = (NSMenuItem*)sender;

    int index = [[[mi parentItem] submenu] indexOfItem:mi];

    NSLog(@"Clicked item with index : %d",index);
}

有什么想法吗? (有没有更好的方法来实现同样的目标?)

【问题讨论】:

  • 为什么不让不同的菜单项调用不同的操作?
  • @RobKener名称 - 在非传统的基于文档的应用程序中)

标签: objective-c cocoa nsmenuitem nsmenu sender


【解决方案1】:

您可以使用菜单项的representedObject 来存储对应用中某个对象的引用。在您的情况下,您可能会使用菜单项引用的文档:

[aMenuItem setRepresentedObject:yourDocument];

然后您可以像这样访问操作中的对象:

- (void)myAction:(id)sender
{
    NSMenuItem* mi = (NSMenuItem*)sender;
    YourDocument* doc = (YourDocument*)[sender representedObject];
    //do something with doc
}

【讨论】:

  • 有趣的想法;尽管我仍然必须从根本上改变我的菜单填充例程背后的逻辑。不过我可能会试一试!非常感谢! ;-)
  • 我终于在创建时将index 数字传递给每个NSMenuItemkeyEquivalent 属性。 ;-)
  • 这有点滥用keyEquivalent。如果您只想要索引,那么最好将索引存储为NSNumber,然后将该NSNumber 对象存储为菜单项的representedObject
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-17
  • 1970-01-01
  • 2022-11-02
相关资源
最近更新 更多