[编辑]正如Willeke指出的那样,它是menuDidClose:不是menuWillClose:。我的代码实际上具有正确的那部分。如果有人发现此问题类似,请更正该帖子。

我敢肯定这只是可可新手的问题,但是我已经动脑了好几个小时了。我已经阅读了几次NSMenu和NSMenuDelegate文档,试图弄清我所缺少的内容,但是看起来很简单。

我有一个带有工具栏和三个视图的首选项窗口的窗口控制器。窗口控制器被声明为NSMenuDelegate。

@interface PrefsController : NSWindowController <NSMenuDelegate, NSWindowDelegate, NSOpenSavePanelDelegate>


此问题是第一个视图上的NSPopUpButton。与popupbutton关联的菜单可以正常工作。我可以通过关联的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)];
    }
}


我为几乎可以肯定是我自己的一个愚蠢的错误而道歉,但是我很沮丧。

最佳答案

菜单代表并不经常使用,因此Apple并没有使它们在Interface Builder中变得太容易设置。而是在awakeFromNib中执行此操作:

myPopupButton.menu.delegate = self;

关于objective-c - menuWillOpen:和menuDidClose:不为NSMenuDelegate调用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38549789/

10-10 16:02