gpt4 book ai didi

objective-c - 在模态 NSWindow 中带有 View 的 NSMenu

转载 作者:搜寻专家 更新时间:2023-10-30 20:05:00 26 4
gpt4 key购买 nike

当从模态 NSWindow 中的按钮显示选择器时,我遇到了一个问题,即没有为 NSMenuItem 中的自定义 View 执行选择器。

这似乎是一个可重现的问题,我已经尽可能地简化了这个问题。

模态窗口显示为via。

   [NSApp runModalForWindow:_modalWindow];

模态窗口只有一个按钮,按钮依附于下面的选择器。

- (IBAction)modalButtonClicked:(id)sender
{
NSMenu* aMenu = [[NSMenu alloc] initWithTitle:@"Menu"];

NSMenuItem* aItemA = [[NSMenuItem alloc] initWithTitle:@"" action:nil keyEquivalent:@""];
NSMenuItem* aItemB = [[NSMenuItem alloc] initWithTitle:@"" action:nil keyEquivalent:@""];
NSMenuItem* aItemC = [[NSMenuItem alloc] initWithTitle:@"" action:nil keyEquivalent:@""];

[aItemA setView:[NSButton buttonWithTitle:@"Item A" target:self action:@selector(menuButtonClicked:)]];
[aItemB setView:[NSButton buttonWithTitle:@"Item B" target:self action:@selector(menuButtonClicked:)]];
[aItemC setView:[NSButton buttonWithTitle:@"Item C" target:self action:@selector(menuButtonClicked:)]];

[aMenu addItem:aItemA];
[aMenu addItem:aItemB];
[aMenu addItem:aItemC];

[NSMenu popUpContextMenu:aMenu withEvent:[NSApp currentEvent] forView:sender];
}

和带断点的菜单点击事件:

- (void)menuButtonClicked:(id)sender
{
NSLog(@"%@", sender);
}

单击该按钮将显示一个包含 3 个按钮的菜单,但是当您单击这些按钮中的任何一个时都没有任何反应。 @(menuButtonClicked:) 永远不会被调用。这只是模式窗口的问题,但没有明显的原因。

最佳答案

文档 https://developer.apple.com/documentation/appkit/nsmenuitem/1514843-target?language=objc状态:

To ensure that a menu item’s target can receive commands while a modal dialog is open, the target object should return YES in worksWhenModal.

事实上,如果有人补充说:

- (BOOL)worksWhenModal {
return YES;
}

然后它起作用了,你的方法 menuButtonClicked 给出了类似的东西:

2019-10-03 22:47:27.892005+0200 MenuTest[12876:454071] <NSButton: 0x600003505760>

关于objective-c - 在模态 NSWindow 中带有 View 的 NSMenu,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58103088/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com