我在我的界面中有两个nsbutton,所有这三个nsbutton,我已经将Key Equilant设置为"Return“key.And,我也为所有这些按钮设置了nextkey view。
我有3个不同的行动,所有这三个按钮和连接已正确作出。如果我使用鼠标点击,相应的操作将被执行。
运行应用程序后,最初我的第一个按钮具有焦点,按下return键,第一个按钮的操作是executed.Next我按下tab键,focussed已更改为第二个按钮,按下return键但第一个按钮的操作是executed.Again我按下tab键,focussed已更改为第三个按钮,按下return键仍执行第一个按钮的操作。
我错过了什么,在nsbutton上按Return键时,正确的操作不会发生,即使焦点是突出显示的。here.Why。
发布于 2012-03-26 12:37:16
听起来像是在使用键盘导航在按钮之间切换并激活选定的按钮。在这种情况下,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。这里的想法是,当默认按钮(即与return键等效的按钮)被选中时,它将下一个按钮的键等效设置为Return,并将其自己的等效按钮设置为nothing。
显然,您可以更改代码的工作方式--例如,您可能希望每个按钮调用不同的操作。在这种情况下,只需让每个操作调用一个与上述代码执行相同工作的公共方法即可。
这里的教训是,如果您为多个按钮设置了相同的等效按键,则找到的第一个按钮将被“按下”。如果您希望更改等效的键,则需要更改各种按钮的等效设置。
发布于 2012-03-26 12:20:24
我不确定当您按Tab键时焦点改变是什么意思--我看不到这种行为(我已经设置了初始的first responder和next键连接)。这三个按钮都是蓝色的,但无论我按什么键,都只有第一个按钮有脉动。经过一些实验后,我发现列表顶部的按钮(在窗口的对象列表中)是在单击return时执行其操作的按钮。
我找不到任何关于这方面的文档,但我认为你不能在同一窗口中为多个按钮设置相同的键等效项。
https://stackoverflow.com/questions/9782244
复制相似问题