我有一个状态项目,希望用户单击它时发生一些动作。到目前为止,一些在线帮助和文档已经使我明白了。

头文件具有以下内容:

- (IBAction)updateStatusItem:(id)sender;


类.m文件具有:

    [statusItem setAction:@selector(updateStatusItem:)];


我已经在applicationDidFinishLaunching和awakeFromNib中都尝试过。

并且在m文件中:

-(IBAction)updateStatusItem:(id)sender{
NSLog(@"updateStatusItem worked");}


从我看来,这是有道理的,但是每当我单击状态项时,菜单通常都会正常下拉,并且消息不会被记录下来。我以为也许我必须以某种方式在IB中将其链接起来,但是据我所知,IB中没有状态项的表示,所有这些均以编程方式完成。我知道可以这样做,但对我不起作用。你们中有人能看到什么问题吗?

谢谢您的帮助。

最佳答案

要发送动作消息,您需要在某个地方发送它。这意味着您还必须设置对象的target,这是您要在其上调用操作选择器的对象:

[statusItem setAction:@selector(updateStatusItem:)];
[statusItem setTarget:yourController];


触发动作后,这将调用控制器对象的‑updateStatusItem:方法。

但是,您不能拥有使用目标/操作并且还具有菜单的状态项。如果您的状态项具有菜单,则始终会通过单击状态项来触发它,并且状态项的目标和操作将被忽略。

10-07 20:27