Objective c [NSPoupButton performClick]:菜单udicClose:未立即调用

Objective c [NSPoupButton performClick]:菜单udicClose:未立即调用,objective-c,macos,appkit,Objective C,Macos,Appkit,我使用-[nspoupbutton performClick:nil]以编程方式弹出nspoupbutton的菜单 即使NSPopupButton菜单的委托已正确设置,但当通过单击菜单外部来取消菜单时,也不会调用委托的menuDidClose:方法。 不过,该委托是在下次鼠标单击NSPopupButton实例后调用的方法 (背景:我正在尝试将“编辑模式”添加到一个可能很长的弹出菜单中,用户可以在其中启用/禁用复选框以隐藏特定项目。一旦用户选择“编辑此菜单”命令,我希望在所述编辑模式下再次弹出该菜

我使用-[nspoupbutton performClick:nil]以编程方式弹出nspoupbutton的菜单

即使NSPopupButton菜单的委托已正确设置,但当通过单击菜单外部来取消菜单时,也不会调用委托的menuDidClose:方法。 不过,该委托是在下次鼠标单击NSPopupButton实例后调用的方法


(背景:我正在尝试将“编辑模式”添加到一个可能很长的弹出菜单中,用户可以在其中启用/禁用复选框以隐藏特定项目。一旦用户选择“编辑此菜单”命令,我希望在所述编辑模式下再次弹出该菜单。)

找到解决方法,请使用[NSMenu popupContextMenu:withEvent:forView]在原始弹出按钮上显示另一个菜单(如洞穴人)


找到解决方法后,使用[NSMenu popupContextMenu:withEvent:forView]在原始弹出按钮上显示另一个菜单(如洞穴人)


您正在替换或编辑菜单吗?请发布a。您正在替换或编辑菜单吗?请发布a。小心。至少在过去,“上下文菜单”意味着注册在上下文菜单中显示的任何服务都可以自动添加到您的菜单中。我想他们添加了另一个呼叫,以弹出不再添加服务的菜单(或使用标志?),试着用它代替。小心。至少在过去,“上下文菜单”意味着注册在上下文菜单中显示的任何服务都可以自动添加到您的菜单中。我想他们添加了另一个调用,以弹出不再添加服务(或使用标志?)的菜单,试着用它代替。
- (IBAction) showHidePopupAction:(id) sender
{
     NSRect  frame = self.shippingServicePopup.frame;

    NSPoint location = [self convertPoint:NSMakePoint(NSMinX(frame),
                                                  NSMaxY(frame))
                               toView:self.window.contentView];

    NSEvent *fakeEvent = [NSEvent mouseEventWithType:NSEventTypeLeftMouseDown
                                        location:location
                                   modifierFlags:0
                                       timestamp:[NSDate timeIntervalSinceReferenceDate]
                                    windowNumber:self.window.windowNumber
                                         context:nil
                                     eventNumber:0
                                      clickCount:1
                                        pressure:1];

    [NSMenu popUpContextMenu:self.editModeMenu withEvent:fakeEvent forView:self];
}