【问题标题】:How to have an NSMenu with dynamic actions如何拥有具有动态操作的 NSMenu
【发布时间】:2009-09-08 09:11:51
【问题描述】:

我想创建一个 NSMenu,其选项类似于您在 Windows 资源管理器中找到的“发送至”选项,其中将列出您可以将文件发送到的附加设备。

从我的研究来看,似乎不可能定义一个选择器来向函数发送参数,所以这不是@selector(@"sendToVolume:1") 的情况。那么,当项目数量未知时,我还能如何让菜单根据单击的项目执行不同的任务呢?

【问题讨论】:

    标签: cocoa nsmenu


    【解决方案1】:

    NSMenuItem 有一个representedObject 属性,可用于存储您想要的任何内容,例如对该项目表示的目标的引用。

    当调用选择器时,您可以获取alciptedobject回:

    -(IBAction)sendTo:(id)sender {
        id destination = [sender representedObject];
    }
    

    【讨论】:

      【解决方案2】:

      但是你可以使用带参数的选择器! NSObject 定义了三个方法,如下所示:

      -performSelector:
      -performSelector:withObject:
      -performSelector:withObject:withObject:
      

      现在,第一个就像拥有@selector(someMethod:),但最后两个用于向选择器发送参数。例如:

      -(void)sendToVolume:(NSNumber)nr { 
      //do stuff
      }
      

      那么你可以这样使用它:

      [appController performSelector:@selector(sendToVolume:) 
                     withObject:[NSNumber numberWithInt:1]];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-12-14
        • 1970-01-01
        • 2020-10-15
        • 1970-01-01
        • 2020-06-20
        • 2012-01-28
        • 2011-06-23
        相关资源
        最近更新 更多