确定一个NSMenu是否已经打开

10

我有一个NSMenu,当用户点击状态栏中的NSStatusItem时会打开它。如何确定NSMenu是否已经打开(展开)?

谢谢!

1个回答

14
您可以使用NSMenuDelegate协议来处理menuWillOpenmenuWillClose消息。使用menuWillOpen来设置一个布尔值,表示菜单已经打开,使用menuWillClose关闭它。
更新: 看起来menuWillClose:不再是可用的委托方法。请改用menuDidClose:

谢谢!但是它仍然不起作用。我所做的是在接口文件中添加<NSMenuDelegate>。然后在.m文件中,我添加了两个方法:`-(void) menuWillOpen:(NSMenu *) theMenu { isClosed = NO;}-(void) menuWillOpen:(NSMenu *) theMenu { isClosed = NO;}`。这样就足够了吗?我做错了什么? - Knodel
1
你必须在 awakeFromNib 方法中调用 [menu setDelegate:self] 或类似的方法。 - Itai Ferber
没问题!我也曾经犯过忘记设置委托的错误,有时候会导致奇怪的结果...祝你好运!;) - Itai Ferber
由于当前的Mac开发者文库中没有menuWillClose方法,而是使用了一个menuDidClose:方法。请参考https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/NSMenuDelegate_Protocol/Reference/Reference.html#//apple_ref/occ/intf/NSMenuDelegate。 - anka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接