首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >key Equiv对于多个nsbutton,nsbutton不能正常工作

key Equiv对于多个nsbutton,nsbutton不能正常工作
EN

Stack Overflow用户
提问于 2012-03-20 14:28:05
回答 2查看 1.6K关注 0票数 3

我在我的界面中有两个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。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-26 12:37:16

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

尝试清除所有三个按钮的等效按键。我想这会给出你想要的行为。

如果您没有使用键盘导航,就不清楚为什么制表符按钮会有任何效果。然而,如果你正在尝试做一些事情,比如让默认的按钮从一个按钮循环到下一个按钮,你需要在每次按下一个按钮时改变键盘上的等价物。我一般不建议这样做--我认为用户不会想让默认按钮随时更改。如果你必须这样做,这里有一些代码:

代码语言:javascript
复制
- (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。

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

这里的教训是,如果您为多个按钮设置了相同的等效按键,则找到的第一个按钮将被“按下”。如果您希望更改等效的键,则需要更改各种按钮的等效设置。

票数 2
EN

Stack Overflow用户

发布于 2012-03-26 12:20:24

我不确定当您按Tab键时焦点改变是什么意思--我看不到这种行为(我已经设置了初始的first responder和next键连接)。这三个按钮都是蓝色的,但无论我按什么键,都只有第一个按钮有脉动。经过一些实验后,我发现列表顶部的按钮(在窗口的对象列表中)是在单击return时执行其操作的按钮。

我找不到任何关于这方面的文档,但我认为你不能在同一窗口中为多个按钮设置相同的键等效项。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9782244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档