Objective c 未为NSMenuDelegate调用menuWillOpen:和menuDidClose:菜单

Objective c 未为NSMenuDelegate调用menuWillOpen:和menuDidClose:菜单,objective-c,cocoa,Objective C,Cocoa,[编辑]正如Willeke有用地指出的,它是菜单关闭:而不是菜单关闭:。我的代码实际上是对的。更正帖子,以防其他人发现类似问题 我肯定这只是一个可可新手的问题,但我已经绞尽脑汁好几个小时了。我已经阅读了NSMenu和NSMenuDelegate文档好几次,试图找出我遗漏了什么,但它看起来很简单 我有一个窗口控制器,用于带有工具栏和三个视图的首选项窗口。窗口控制器声明为NSMenuDelegate @interface PrefsController : NSWindowController &l

[编辑]正如Willeke有用地指出的,它是
菜单关闭:
而不是
菜单关闭:
。我的代码实际上是对的。更正帖子,以防其他人发现类似问题

我肯定这只是一个可可新手的问题,但我已经绞尽脑汁好几个小时了。我已经阅读了NSMenu和NSMenuDelegate文档好几次,试图找出我遗漏了什么,但它看起来很简单

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

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

我为几乎可以肯定是我犯了一个愚蠢的错误而道歉,但我被难住了。

菜单代理没有经常使用,所以苹果没有让它们在Interface Builder中设置得太容易。相反,在
awakeFromNib
中执行此操作:

myPopupButton.menu.delegate = self;

菜单代理并不经常使用,所以苹果并没有让它们在Interface Builder中设置得太容易。相反,在
awakeFromNib
中执行此操作:

myPopupButton.menu.delegate = self;

我通常忘记与代表联系。对于弹出按钮,我将使用
nspoupbuttonwillpopupnotification
和弹出按钮的动作。这是
menuDidClose:
。感谢您的回复。我的代码实际上有
菜单关闭:
。我在这里和其他网站上读了很多关于NSMenuDelegate方法的文章,我在写这篇文章时犯了错误。我现在正在查看代理连接,因为我已经睡了一会儿<代码>NSPopUpButtonWillPopUpNotification不会被调用。不幸的是,直到菜单显示之后,代码才运行,我找不到相应的DidClose方法。我无法将文件所有者委托连接到弹出按钮本身。父窗口已连接。
NSPopUpButtonWillPopUpNotification
确实被调用,这让我相信popupbutton的委托已正确连接,而不是嵌入在popupbutton中的菜单?
myPopupButton.menu.delegate=self
在初始化中,可以在XIB中连接菜单的委托。菜单和弹出按钮是两个独立的对象。我通常忘记连接代理。对于弹出按钮,我将使用
nspoupbuttonwillpopupnotification
和弹出按钮的动作。这是
menuDidClose:
。感谢您的回复。我的代码实际上有
菜单关闭:
。我在这里和其他网站上读了很多关于NSMenuDelegate方法的文章,我在写这篇文章时犯了错误。我现在正在查看代理连接,因为我已经睡了一会儿<代码>NSPopUpButtonWillPopUpNotification不会被调用。不幸的是,直到菜单显示之后,代码才运行,我找不到相应的DidClose方法。我无法将文件所有者委托连接到弹出按钮本身。父窗口已连接。
NSPopUpButtonWillPopUpNotification
确实被调用,这让我相信popupbutton的委托已正确连接,而不是嵌入在popupbutton中的菜单?
myPopupButton.menu.delegate=self
在初始化中,可以在XIB中连接菜单的委托。菜单和弹出按钮是两个独立的对象。谢谢!这就解决了问题。我一定尝试了四种不同的方法来做同样的事情,但忽略了一个事实,那就是我需要弹出菜单的代表。事后看来,这是显而易见的非常感谢。这就解决了问题。我一定尝试了四种不同的方法来做同样的事情,但忽略了一个事实,那就是我需要弹出菜单的代表。事后看来,这是显而易见的