[编辑]正如Willeke帮助指出menuDidClose:
NOT menuWillClose:
。我的代码实际上是正确的。更正帖子以防其他人发现此研究类似的问题。
我确定这只是一个可可新手问题,但我已经把它的大脑震撼了好几个小时。我曾几次读过NSMenu和NSMenuDelegate文档试图弄清楚我错过了什么,但看起来很直接。
我有一个带有工具栏和三个视图的首选项窗口的窗口控制器。窗口控制器声明为NSMenuDelegate。
@interface PrefsController : NSWindowController <NSMenuDelegate, NSWindowDelegate, NSOpenSavePanelDelegate>
此问题是第一个视图上的NSPopUpButton。与弹出按钮相关的菜单工作正常。我可以通过相关的IBOutlet变量修改菜单等。它已绑定到共享用户默认值控制器以获取所选值,并且工作正常。
但是访问菜单时不会调用menuWillOpen:
和menuDidClose:
方法。
- (void)menuWillOpen:(NSMenu *)menu {
if (menu == myPopupButton.menu) {
[self updateMenuImages:NSMakeSize(32, 32)];
}
}
- (void)menuDidClose:(NSMenu *)menu {
if (menu == myPopupButton.menu) {
[self updateMenuImages:NSMakeSize(16, 16)];
}
}
对于我几乎肯定是一个愚蠢的错误,我表示道歉,但我很难过。
答案 0 :(得分:2)
菜单代表经常不被使用,因此Apple在Interface Builder中设置它们太容易了。相反,请在awakeFromNib
:
myPopupButton.menu.delegate = self;