gpt4 book ai didi

objective-c - 关键当量。对于 nsbutton 对于多个 nsbuttons 不能正常工作

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

我的界面构建器中有两个 nsbutton。对于所有这三个 nsbutton,我都将 Key Equilant 设置为“Return”键。我还为所有这些按钮设置了 nextkey View 。

我对所有这三个按钮执行了 3 种不同的操作,并且连接正确。如果我使用鼠标单击,则会执行适当的操作。

运行应用程序后,最初我的第一个按钮有焦点,按下返回键,第一个按钮的 Action 被执行。接下来我按下 tab 键,焦点已变为第二个按钮,按下返回键但第一个按钮的 Action 被执行。再次我按下 tab 键,焦点已更改为第 3 个按钮,按下返回键仍然执行第 1 个按钮的操作。

我在这里遗漏了什么。为什么在 nsbutton 上按下 Return 键时没有发生适当的操作,即使焦点被突出显示。

最佳答案

听起来您正在使用键盘导航在按钮之间切换并激活所选按钮。在这种情况下,返回键通常对应于按下所选按钮。但是,由于您已将 Return 指定为一个或多个按钮的快捷方式,因此响应程序链会搜索并找到具有匹配等效键的按钮,以便发送该按钮的消息。

尝试清除所有三个按钮的等效键。我认为这会提供您正在寻找的行为。

如果您不使用键盘导航,则不清楚为什么选项卡按钮会起作用。然而,如果您尝试做一些事情,例如使默认按钮从一个按钮循环到下一个按钮,则每次按下按钮时都需要更改键盘等效项。我一般不会推荐——我认为用户不希望默认按钮时时刻刻都在变化。如果必须的话,这里有一些代码:

- (IBAction)nextButton:(NSButton*)sender
{
int tag = [sender tag];
NSView *superview = [sender superview];
if ([sender.keyEquivalent isEqualToString:@"\r"]) {
NSButton *nextButton = [superview viewWithTag:(tag % 3) + 1];
nextButton.keyEquivalent = @"\r";
sender.keyEquivalent = @"";
}
}

这假设您有三个按钮,并且每个按钮都配置有 nextButton: 方法作为其操作。此外,这些按钮分别具有标签 1、2 和 3。 The idea here is that when the default button (i.e. the one with the return key as its equivalent) is selected, it sets the next button's key equivalent to Return and sets its own equivalent to nothing.

您显然可以更改代码的工作方式——例如,您可能希望每个按钮调用不同的操作。在这种情况下,只需让每个操作调用一个通用方法来完成与上述代码相同的工作。

这里的教训是,如果为多个按钮设置相同的等效键,第一个被发现的按钮将被“按下”。如果你想改变键的等效值,你需要为你的各个按钮更改等效值集。

关于objective-c - 关键当量。对于 nsbutton 对于多个 nsbuttons 不能正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9782244/

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