menuWillOpen:和menuDidClose:未调用NSMenuDelegate

时间:2016-07-24 07:39:29

标签: objective-c cocoa

[编辑]正如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)];
    }
}

对于我几乎肯定是一个愚蠢的错误,我表示道歉,但我很难过。

1 个答案:

答案 0 :(得分:2)

菜单代表经常不被使用,因此Apple在Interface Builder中设置它们太容易了。相反,请在awakeFromNib

中执行此操作
myPopupButton.menu.delegate = self;